tm.getDeviceId()已弃用?

rav*_*vi 15 java android telephonymanager android-8.0-oreo

我正在获取IMEI和设备ID,所以我在这里得到一个问题getDeviceId()已被弃用.

TelephonyManager tm = (TelephonyManager) 
                 getSystemService(this.TELEPHONY_SERVICE);

imei = tm.getDeviceId();
device = Settings.Secure.getString(this.getContentResolver(),
           Settings.Secure.ANDROID_ID);
Run Code Online (Sandbox Code Playgroud)

Nil*_*hod 20

getDeviceId()

返回订阅的唯一设备ID,例如,GSM的IMEI和CDMA电话的MEID.如果设备ID不可用,则返回null.

此方法在API级别26中已弃用.

使用(@link getImei}该方法返回IMEIGSM

(@link getMeid}返回MEIDCDMA.

有关更多信息,请阅读TelephonyManager

试试这个来获取IMEI

 @RequiresApi(api = Build.VERSION_CODES.O)
 TelephonyManager tm = (TelephonyManager)
            getSystemService(this.TELEPHONY_SERVICE);
    String imei = tm.getImei();
Run Code Online (Sandbox Code Playgroud)

要么

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            String imei = telephonyMgr.getImei();
} else {
            String imei = telephonyMgr.getDeviceId();
}
Run Code Online (Sandbox Code Playgroud)

试试这个 MEID

@RequiresApi(api = Build.VERSION_CODES.O)
TelephonyManager tm = (TelephonyManager)
            getSystemService(this.TELEPHONY_SERVICE);

    String meid=tm.getMeid();
Run Code Online (Sandbox Code Playgroud)

要么

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            String meid=tm.getMeid();
} 
Run Code Online (Sandbox Code Playgroud)


kar*_*rim 7

编辑:从 Android 10 开始,除非您拥有 READ_PRIVILEGED_PHONE_STATE 权限,否则您无法请求 IMEI 和 MEID

不应该是这样的吗?

            if (Build.VERSION.SDK_INT >= 26) {
                if (telMgr.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA) {
                    deviceId = telMgr.getMeid();
                } else if (telMgr.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM) {
                    deviceId = telMgr.getImei();
                } else {
                    deviceId = ""; // default!!!
                }
            } else {
                deviceId = telMgr.getDeviceId();
            }
Run Code Online (Sandbox Code Playgroud)

  • 3rd 方应用程序无法请求“READ_PRIVILEGED_PHONE_STATE” (2认同)

Bin*_*erz 5

这是我的解决方案:

@SuppressWarnings("deprecation")
private String getIMEINumber() {
    String IMEINumber = "";
    if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
        TelephonyManager telephonyMgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            IMEINumber = telephonyMgr.getImei();
        } else {
            IMEINumber = telephonyMgr.getDeviceId();
        }
    }
    return IMEINumber;
}
Run Code Online (Sandbox Code Playgroud)