Будет ли TelephonyManger.getDeviceId () возвращать идентификатор устройства для планшетов, таких как Galaxy Tab?

Я хочу получить идентификатор устройства, который будет уникальным для каждого устройства Android. В настоящее время я разрабатываю планшетное устройство. Хотите получить уникальный идентификатор устройства и сохранить соответствующие значения ...

Итак, я хочу знать, вернут ли планшетные устройства значение, если я использую TelephonyManager.getDeviceId () ... ??? Или есть какое-либо другое значение, уникальное для каждого устройства ???


person Rahul Kalidindi    schedule 27.09.2010    source источник
comment
Dupe: stackoverflow.com/questions / 2785485 /   -  person fredley    schedule 27.09.2010


Ответы (3)


Это не повторяющийся вопрос. Как оказалось, CTS Google требует, чтобы getPhoneType для TelephonyManager не было нулем, а getDeviceId для TelephonyManager должен быть нулевым для устройств, отличных от телефона.

Итак, чтобы получить IMEI, попробуйте использовать:

String imei = SystemProperties.get("ro.gsm.imei")

К сожалению, SystemProperties не является общедоступным классом в ОС Android, что означает, что он не является общедоступным для обычных приложений. Попробуйте просмотреть этот пост, чтобы получить к нему доступ: Где находится android.os.SystemProperties

person Matt Quigley    schedule 10.06.2011

TelephonyManger.getDeviceId () Возвращает уникальный идентификатор устройства, например IMEI для GSM и MEID или ESN для телефонов CDMA.

final TelephonyManager mTelephony = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);            
String myAndroidDeviceId = mTelephony.getDeviceId(); 

Но рекомендую использовать:

Settings.Secure.ANDROID_ID, который возвращает идентификатор Android в виде уникальной 64-битной шестнадцатеричной строки.

    String   myAndroidDeviceId = Secure.getString(getApplicationContext().getContentResolver(), Secure.ANDROID_ID); 

Иногда TelephonyManger.getDeviceId () возвращает null, поэтому для обеспечения уникального идентификатора вы будете использовать этот метод:

public String getUniqueID(){    
    String myAndroidDeviceId = "";
    TelephonyManager mTelephony = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    if (mTelephony.getDeviceId() != null){
        myAndroidDeviceId = mTelephony.getDeviceId(); 
    }else{
         myAndroidDeviceId = Secure.getString(getApplicationContext().getContentResolver(), Secure.ANDROID_ID); 
    }
    return myAndroidDeviceId;
}
person Jorgesys    schedule 16.11.2011
comment
У этого решения есть проблема: когда пользователь переключается в режим полета, информация о телефонии исчезает, и метод возвращает значение Secure.ANDROID_ID. Таким образом, метод getUniqueID() может возвращать разные значения для разных состояний одного и того же устройства. - person Ted Hopp; 06.02.2015
comment
@TedHopp, проверено на нескольких устройствах - в авиарежиме метод getUniqueID () возвращает то же значение - person Tigran Sarkisian; 27.04.2015
comment
почему ANDROID_ID возвращает мне 16-значный идентификатор вместо 64-значного шестнадцатеричного @Elenasys - person user1801879; 09.06.2015
comment
Так почему бы просто не использовать Secure.ANDROID_ID всегда? - person Alireza A. Ahmadi; 24.08.2015
comment
ANDROID_ID генерируется, когда пользователь настраивает устройство. Если устройство снова сбросить, идентификатор может измениться. - person Prasad Pawar; 14.10.2016
comment
вы должны добавить try catch, чтобы избежать сбоя при разрешении времени выполнения Android 6+ - person Logan Guo; 08.05.2017

С Android 8 все изменилось. Вы должны использовать Build.getSerial(), чтобы получить серийный номер устройства и добавить разрешение READ_PHONE_STATE.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    serial = Build.getSerial(); // Requires permission READ_PHONE_STATE
} else {
    serial = Build.SERIAL; // Will return 'unknown' for device >= Build.VERSION_CODES.O
}

И получить IMEI или MEID так:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    String imei = tm.getImei(); // Requires permission READ_PHONE_STATE
    serial = imei == null ? tm.getMeid() : imei; // Requires permission READ_PHONE_STATE
} else {
    serial = tm.getDeviceId(); // Requires permission READ_PHONE_STATE
}
person Redwolf    schedule 07.12.2017