2010-09-27 7 views
14

Ich möchte die Geräte-ID erhalten, die für jedes Android-Gerät eindeutig ist. Ich entwickle derzeit für ein Tablet-Gerät. Willst du einzigartige Geräte-ID und speichern Sie die entsprechenden Werte ...Wird TelephonyManger.getDeviceId() Geräte-ID für Tablets wie Galaxy Tab ... zurückgeben?

Also, ich möchte wissen, ob Tablet-Geräte einen Wert zurückgeben, wenn ich TelephonyManager.getDeviceId() ... verwenden ??? Oder gibt es noch andere Wert, der für jedes Gerät einzigartig ist ???

+1

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

Antwort

8

Dies ist nicht eine doppelte Frage. Wie sich herausstellt, erfordert Google CTS, dass getPhoneType von TelephonyManager keine sein muss und getDeviceId von TelephonyManager null sein muss für Nicht-Telefon-Geräte.

So IMEI zu bekommen, versuchen Sie es zu verwenden:

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

Leider ist SystemProperties eine nicht-öffentliche Klasse im Android O, das es zu regelmäßigen Anwendungen nicht öffentlich zur Verfügung stehenden Mittel ist. Versuchen Sie in diesem Beitrag der Suche nach Hilfe Zugriff auf sie: Where is android.os.SystemProperties

49

TelephonyManger.getDeviceId() die eindeutigen Geräte-ID Gibt zum Beispiel der IMEI für GSM und den MEID oder ESN für CDMA-Telefone.

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

aber ich empfehle zu verwenden:

Settings.Secure.ANDROID_ID, die die Android-ID als eine einzigartige 64-Bit-Hex-String zurückgibt.

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

Manchmal TelephonyManger.getDeviceId() den Wert null zurück, so eine eindeutige ID, um sicherzustellen, werden Sie diese Methode verwenden:

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

Diese Lösung hat ein Problem: Wenn der Benutzer in den Flugzeugmodus wechselt, werden die Telefoninformationen gelöscht und die Methode gibt den Wert "Secure.ANDROID_ID" zurück. So kann die Methode 'getUniqueID()' verschiedene Werte für verschiedene Zustände des gleichen Geräts zurückgeben. –

+0

@TedHopp, auf mehreren Geräten überprüft - im Flugzeug-Modus getUniqueID() -Methode gibt den gleichen Wert zurück –

+0

Warum ist ANDROID_ID 16 stellige ID für mich, anstelle von 64 stelligen Hex @Elenasys – user1801879

2

Seit geändert Android 8 alles. Sie sollten Build.getSerial() verwenden, um die Seriennummer des Geräts abzurufen und die Berechtigung READ_PHONE_STATE hinzuzufügen.

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 
} 

und nutzen Sie die IMEI oder MEID auf diese Weise:

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 
} 
Verwandte Themen