Android.provider.Settings.Secure.ANDROID_ID возвращает "android_id"

Есть ли причина android.provider.Settings.Secure.ANDROID_ID возвращает константу «android_id» вместо 64-разрядного числа в виде шестнадцатеричной строки?

Описание: android.provider.Settings.Secure.ANDROID_ID

  • 64-разрядное число (как шестнадцатеричная строка), которое генерируется случайным образом, когда пользователь сначала устанавливает устройство и должен оставаться постоянным в течение всего срока службы устройства пользователя. Значение может измениться, если на устройстве выполняется заводская перезагрузка.

Я использую Samsung Galaxy S4 w /

<uses-sdk android:minSdkVersion="13" android:targetSdkVersion="19" /> 

ура

android.provider.Settings.Secure.ANDROID_ID является константой, которая может использоваться в android.provider.Settings.Secure.getString(ContentResolver resolver, String name) . По умолчанию установлено значение «android_id», так как это имя свойства, содержащего фактический идентификатор Android.

Используйте этот код для получения фактического идентификатора:

 String androidId = Secure.getString(getContext().getContentResolver(), Secure.ANDROID_ID); 

Это просто для уточнения ответа @MikeLaren, что верно. Но есть несколько ошибок, о которых нужно знать, как описано в следующем коде, что я и сейчас использую:

  // Get the unique (supposedly) ID for this Android device/user combination long androidId = convertHexToLong(Settings.Secure.getString( _applicationContext.getContentResolver(), Settings.Secure.ANDROID_ID)); 

….

  // Method to convert a 16-character hex string into a Java long. This only took me about an hour, // due to a known bug in Java that it took them 13 years to fix, and still isn't fixed in the // version of Java used for Android development. // http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4215269 // http://stackoverflow.com/questions/1410168/how-to-parse-negative-long-in-hex-in-java // On top of that it turns out that on a HTC One the Settings.Secure.ANDROID_ID string may be 15 // digits instead of 16! private long convertHexToLong(String hexString) { hexString = "0000000000000000" + hexString; int i = hexString.length(); hexString = hexString.substring(i - 16, i); try { return Long.parseLong(hexString.substring(0, 8), 16) << 32 | Long.parseLong(hexString.substring(8, 16), 16); } catch (Exception e) { return 0L; } }