Telefonymanger.getDeviceId () Retornará ID do dispositivo para tablets como o Galaxy Tab…?

StackOverflow https://stackoverflow.com/questions/3802644

  •  25-09-2019
  •  | 
  •  

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 ???

Foi útil?

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
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top