16

我想获取每个 Android 设备唯一的设备 ID。我目前正在为平板设备开发。想要获取唯一的设备 id 并存储相应的值...

所以,我想知道如果我使用 TelephonyManager.getDeviceId()...,平板设备是否会返回一个值......?或者是否有任何其他值对每个设备都是唯一的???

4

3 回答 3

60

TelephonyManger.getDeviceId()返回唯一的设备 ID,例如,GSM 的 IMEI 和 CDMA 电话的 MEID 或 ESN。

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

但我建议使用:

Settings.Secure.ANDROID_ID将 Android ID 作为唯一的 64 位十六进制字符串返回。

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

有时TelephonyManger.getDeviceId()将返回 null,因此为了确保唯一的 id,您将使用此方法:

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;
}
于 2011-11-16T00:37:07.110 回答
9

不是一个重复的问题。事实证明,Google 的 CTS 要求 TelephonyManager 的 getPhoneType 必须为 none,非电话设备的 TelephonyManager 的 getDeviceId 必须为 null。

所以要获取IMEI,请尝试使用:

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

不幸的是,SystemProperties 是 Android 操作系统中的一个非公共类,这意味着它对常规应用程序不公开。尝试查看这篇文章以获得访问它的帮助:android.os.SystemProperties 在哪里

于 2011-06-10T15:07:45.413 回答
2

自 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
}
于 2017-12-07T19:57:58.590 回答