Telefonymanger.getDeviceId () Retornará ID do dispositivo para tablets como o Galaxy Tab…?
Pergunta
Quero obter o ID do dispositivo que será exclusivo para cada dispositivo Android. Atualmente, estou desenvolvendo um dispositivo de tablet. Deseja obter ID de dispositivo exclusivo e armazenar os valores correspondentes ...
Então, eu quero saber se os dispositivos tablet retornarão um valor se eu usar o TelefonyManager.getDeviceId () ... ??? Ou há algum outro valor que seja único para cada dispositivo ???
Solução
Isto é não uma pergunta duplicada. Como se vê, o CTS do Google exige que o GetPhoneType of TelefonyManager não seja necessário e o GetDeviceId do TelefonyManager precisa ser nulo para dispositivos que não sejam de telefone.
Então, para obter o IMEI, tente usar:
String imei = SystemProperties.get("ro.gsm.imei")
Infelizmente, o SystemProperties é uma classe não pública no sistema operacional Android, o que significa que não está disponível publicamente para aplicações regulares. Tente procurar este post para obter ajuda para acessá -lo: Onde está android.os.systemproperties
Outras dicas
Telefonymanger.getDeviceId () Retorna o ID de dispositivo exclusivo, por exemplo, o IMEI para GSM e o MEID ou ESN para telefones CDMA.
final TelephonyManager mTelephony = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String myAndroidDeviceId = mTelephony.getDeviceId();
Mas eu recomendo usar:
Settings.secure.android_id Isso retorna o Android ID como uma corda hexadecimal única de 64 bits.
String myAndroidDeviceId = Secure.getString(getApplicationContext().getContentResolver(), Secure.ANDROID_ID);
As vezes Telefonymanger.getDeviceId () retornará nulo, para garantir um ID exclusivo, você usará este método:
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;
}
Desde o Android 8, tudo mudou. Você deveria usar Build.getSerial()
, para obter o número de série do dispositivo e adicionar a permissão 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
}
E pegue o IMEI ou MEid desta maneira:
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
}