java - Android 10 中没有适用于 Android 开发人员的 IMEI

标签 java android telephonymanager imei android-10.0

由于 Android 非常重视安全性并试图使新的 android 版本更加安全,因此开发人员越来越难以跟上新的安全功能并找到旧的替代方法来使他们的应用与旧功能兼容。

这个问题是关于新 Android 10 中的 IMEI 的! 使用以下代码,旧方法非常容易获取 IMEI 号码

  String deviceId = "";

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

在新的 Android 10 中,现在限制获取 IMEI 号码。根据安卓文档

apps must have the READ_PRIVILEGED_PHONE_STATE privileged permission in order to access the device's non-resettable identifiers, which include both IMEI and serial number.

问题是当我们尝试使用

请求运行时权限时
  android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE

我的编译器无法识别此权限,并且我在这一行出现错误,但是当我在 list 文件中询问此权限时,它确实识别了此行,但通过警告此权限仅适用于系统应用程序。

我想让我的应用与 Android 10 兼容,并且想要获取 IMEI。如何在不成为设备​​所有者或配置文件所有者的情况下在 Android 10 中获取 IMEI 号码?

最佳答案

只有设备所有者应用可以读取唯一标识符,或者您的应用必须是具有READ_PRIVILEGED_PHONE_STATE 的系统应用。您不能为普通应用请求此权限。

关于java - Android 10 中没有适用于 Android 开发人员的 IMEI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57993401/

相关文章:

android - Android 振铃时如何接收主叫方键盘上按下的号码?

java - 通过java运行ab-initio图?

android - 来自可绘制资源的资源 $NotFoundException : File res/color/dark. xml

java - 使用 maven surefire 插件运行多个测试类

java - apk 中的classes.dex 在哪里?

android - ListFragment 不显示当前时间的变化

Android、TelephonyManager、PhoneStateListener 的乐趣和来电

android - 如何以编程方式将调用屏幕置于最前面?

java - 在 java 中包含 css(用于 href 标签)

java - 如何仅根据数字、点和逗号过滤字符串?