В чем разница между идентификатором Android и идентификатором устройства?
Вот как я их получаю:
Идентификатор Android:
String androidID = Settings.Secure.getString(MainActivity.this.getContentResolver(),
Settings.Secure.ANDROID_ID);
Идентификатор устройства:
String deviceID = ((TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE))
.getDeviceId()
Мне нужно однозначно идентифицировать мое устройство Android. Для использования deviceID
требуется разрешение на «совершение и управление телефонными звонками». При использовании androidID
нет. Поэтому я соглашаюсь, androidID
поскольку мне не нужны никакие привилегии управления вызовами.
В чем точная разница между ними? Если их нет, то зачем два идентификатора?
Будут ли сброшены оба идентификатора, если я сброшу свое устройство до заводских настроек?
Я знаю, что deviceID
работает для всех версий Android. Будет ли androidID
работать для всех версий?
Хотя ваш вопрос касается проблемы разработки (которая здесь не по теме), ответ актуален и для пользователей, поэтому я отвечу на него:
Во время «нормальной работы» (т. е. до тех пор, пока вы не сбросите устройство до заводских настроек или не сбросите GAID) все эти идентификаторы можно использовать для идентификации устройства. При использовании нескольких пользователей (через профили пользователей) на устройстве все, кроме DeviceID, будут даже идентифицировать пользователя (профиль).
Насколько мне известно, все эти идентификаторы доступны во всех версиях Android (по крайней мере, в тех, которые в настоящее время актуальны, например, GB/2.3 и выше). Последние два, очевидно, только в том случае, если установлены GApps, поэтому на устройствах с пользовательским ПЗУ без GApps их может не быть.