首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android 10中没有针对Android开发人员的IMEI

Android 10中没有针对Android开发人员的IMEI
EN

Stack Overflow用户
提问于 2019-09-18 12:59:16
回答 3查看 12.3K关注 0票数 4

随着Android对安全性的重视,并试图使新的android版本更加安全,开发人员很难跟上新的安全特性,并找到新的方法来使他们的应用程序与旧功能兼容。

这个问题是关于NewAndroid10!中的IMEI的旧方法非常容易使用下面的代码获得IMEI编号

代码语言:javascript
复制
  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号码。根据android文档

应用程序必须拥有READ_PRIVILEGED_PHONE_STATE特权权限才能访问设备的不可重置标识符,其中包括IMEI和序列号。

问题在于,当我们试图询问运行时权限时,

代码语言:javascript
复制
  android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE

我的编译器不识别此权限,这一行出现了错误,但当我在清单文件中请求此权限时,它确实识别了这一行,但通过警告,该权限仅适用于系统应用程序。

我想让我的应用程序与Android 10兼容,并想得到IMEI。我如何才能在不成为设备所有者或配置文件所有者的情况下获得Android 10中的IMEI号码?

EN

回答 3

Stack Overflow用户

发布于 2019-09-19 11:41:47

只有设备所有者应用程序才能读取唯一标识符,否则应用程序必须是带有READ_PRIVILEGED_PHONE_STATE的系统应用程序。对于一个普通的应用程序,你不能请求这个许可。

票数 3
EN

Stack Overflow用户

发布于 2020-01-06 08:11:00

Android 10限制开发者访问IMEI号码。

您可以通过获取软件ID来获得另一种解决方案。您可以使用软件id作为唯一的id。请找到下面的代码,我在应用程序中使用。

代码语言:javascript
复制
 public static String getDeviceId(Context context) { 

    String deviceId;

    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {

deviceId = Settings.Secure.getString(context.getContentResolver(),Settings.Secure.ANDROID_ID);

}else {

final TelephonyManager mTelephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);



     if (mTelephony.getDeviceId() != null) {
            deviceId = mTelephony.getDeviceId();
        } else {
            deviceId = Settings.Secure.getString(
                    context.getContentResolver(),
                    Settings.Secure.ANDROID_ID);
        }
    }

return deviceId;

}
票数 3
EN

Stack Overflow用户

发布于 2019-09-30 08:54:19

要获得唯一标识符,可以使用FirebaseInstanceId.getInstance().getId();String uniqueID = UUID.randomUUID().toString();。在这里查看一下最佳实践https://developer.android.com/training/articles/user-data-ids#java

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57993401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档