Будет ли TelephonyManger.getDeviceId() вернуть идентификатор устройства для планшетов, таких как вкладка Galaxy...?
Я хочу получить идентификатор устройства, который будет уникальным для каждого устройства Android. В настоящее время я разрабатываю планшетное устройство. Хотите получить уникальный идентификатор устройства и сохранить соответствующие значения...
Итак, я хочу знать, вернет ли Tablet-устройства значение, если я использую TelephonyManager.getDeviceId()...??? Или есть другое значение, уникальное для каждого устройства?
Ответы
Ответ 1
Это не дублирующий вопрос. Как оказалось, Google CTS требует, чтобы getPhoneType TelephonyManager был никем, а getDeviceId для TelephonyManager должен быть нулевым для нетелефонных устройств.
Итак, чтобы получить IMEI, попробуйте использовать:
String imei = SystemProperties.get("ro.gsm.imei")
К сожалению, SystemProperties является непубличным классом в ОС Android, что означает, что он не является общедоступным для обычных приложений. Попытайтесь посмотреть это сообщение, чтобы получить доступ к нему: Где находится android.os.SystemProperties
Ответ 2
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;
}
Ответ 3
Так как 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
}