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

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

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

Ответы [ 3 ]

58 голосов
/ 16 ноября 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 () вернет ноль, поэтому для обеспечения уникального идентификатора вы будете использовать этот метод:

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;
}
9 голосов
/ 10 июня 2011

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

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

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

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

2 голосов
/ 07 декабря 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
}
...