TelephonyManger.getDeviceId()会返回像Galaxy Tab这样的平板电脑的设备ID吗?

时间:2010-09-27 09:46:55

标签: android tablet-pc

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

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

3 个答案:

答案 0 :(得分:57)

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

答案 1 :(得分:9)

这是不是重复的问题。事实证明,Google的CTS要求TelephonyManager的getPhoneType必须为none,并且对于非电话设备,TelephonyManager的getDeviceId需要为null。

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

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

不幸的是,SystemProperties是Android操作系统中的非公共类,这意味着常规应用程序无法公开使用它。请尝试查看此帖子以获取访问权限:Where is android.os.SystemProperties

答案 2 :(得分: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
}