Will TelephonyManger.getDeviceId() return device id for Tablets like Galaxy Tab…?

前端 未结 3 537
深忆病人
深忆病人 2020-12-05 11:37

I want to get the device id that will be unique for each Android device. I am presently developing for a Tablet device. Want to get unique device id and store the correspond

相关标签:
3条回答
  • 2020-12-05 11:43

    Since Android 8 everything's changed. You should use Build.getSerial(), to get the serial number of the device and add the permission 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
    }
    

    And get the IMEI or MEID this way:

    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
    }
    
    0 讨论(0)
  • 2020-12-05 11:45

    TelephonyManger.getDeviceId() Returns the unique device ID, for example, the IMEI for GSM and the MEID or ESN for CDMA phones.

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

    But i recommend to use:

    Settings.Secure.ANDROID_ID that returns the Android ID as an unique 64-bit hex string.

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

    Sometimes TelephonyManger.getDeviceId() will return null, so to assure an unique id you will use this method:

    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;
    }
    
    0 讨论(0)
  • 2020-12-05 11:57

    This is not a duplicate question. As it turns out, Google's CTS require that getPhoneType of TelephonyManager needs to be none and getDeviceId of TelephonyManager needs to be null for non-phone devices.

    So to get IMEI, please try to use:

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

    Unfortunately, SystemProperties is a non-public class in the Android OS, which means it isn't publicly available to regular applications. Try looking at this post for help accessing it: Where is android.os.SystemProperties

    0 讨论(0)
提交回复
热议问题