2010-09-27 11 views
14

Je veux obtenir l'identifiant de l'appareil qui sera unique pour chaque appareil Android. Je suis en train de développer pour un appareil tablette. Donc, je veux savoir si les appareils Tablet retournera une valeur si j'utilise TelephonyManager.getDeviceId() ... ??? Ou y a-t-il d'autres? valeur qui est unique pour chaque appareil ???TelephonyManger.getDeviceId() retournera-t-il l'identifiant de l'appareil pour les Tablettes comme Galaxy Tab ...?

+1

Dupe: http://stackoverflow.com/questions/2785485/is-there-a-unique-android-device-id – fredley

Répondre

8

Ceci est et non une question en double. Il s'avère que Google CTS exige que getPhoneType de TelephonyManager soit nul et que getDeviceId de TelephonyManager soit nul pour les appareils autres que les téléphones.

Donc, pour obtenir IMEI, s'il vous plaît essayer d'utiliser:

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

Malheureusement, SystemProperties est une classe non-public dans le système d'exploitation Android, ce qui signifie qu'il est pas accessible au public à des applications régulières. Essayez de regarder ce poste à l'aide d'y accéder: Where is android.os.SystemProperties

49

TelephonyManger.getDeviceId() Renvoie l'ID unique de l'appareil, par exemple, l'IMEI pour le GSM et le MEID ou ESN pour les téléphones CDMA.

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

Mais je vous recommande d'utiliser:

Settings.Secure.ANDROID_ID qui retourne l'ID Android comme une chaîne hexagonale unique de 64 bits.

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

Parfois TelephonyManger.getDeviceId() renvoie null, afin d'assurer un identifiant unique que vous utiliserez cette méthode:

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; 
} 
+4

Cette solution a un problème: lorsque l'utilisateur passe en mode avion, les informations de téléphonie disparaissent et la méthode retourne la valeur 'Secure.ANDROID_ID'. Ainsi, la méthode 'getUniqueID()' peut renvoyer des valeurs différentes pour différents états du même périphérique. –

+0

@TedHopp, vérifié sur plusieurs appareils - en mode avion La méthode getUniqueID() renvoie la même valeur –

+0

Pourquoi ANDROID_ID renvoie-t-il un ID à 16 chiffres, au lieu de 64 caractères hex @Elenasys – user1801879

2

Depuis Android 8 tout a changé. Vous devez utiliser Build.getSerial() pour obtenir le numéro de série de l'appareil et ajouter l'autorisation 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 
} 

Et obtenir le IMEI ou MEID ainsi:

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 
}