欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android Q适配之IMEI替换为Android_id

程序员文章站 2022-05-21 21:13:12
前置工作: 项目配置升到对应的29版本 compilesdkversion: 29, buildtoolsversion: ‘29.0.0', minsdkversio...

前置工作:

项目配置升到对应的29版本

compilesdkversion: 29,
buildtoolsversion: ‘29.0.0',
minsdkversion : 19,
targetsdkversion : 29,
javaversion : javaversion.version_1_8

Android Q适配之IMEI替换为Android_id

升级到android q后的权限提示界面

老版本获取imei的方法:

public static string getimei(context context) {
    string deviceid = null;
    try {
      telephonymanager tm = (telephonymanager) context
          .getsystemservice(context.telephony_service);
      deviceid = tm.getdeviceid();
      if (deviceid == null || "".equals(deviceid)) {
        return getlocalmacaddress(context);
      }
    } catch (exception e) {
      e.printstacktrace();
      if (deviceid == null || "".equals(deviceid)) {
        return getlocalmacaddress(context);//获取mac地址,在android 9 p版本中,地址会随机变化,不可用作唯一标识,可去掉。
      }
    }

    return deviceid;
  }

android q获取imei方法

public static string getimei(context context) {
    string deviceid = null;
    try {
      telephonymanager tm = (telephonymanager) context
          .getsystemservice(context.telephony_service);
      if (build.version.sdk_int >= build.version_codes.q) {
        deviceid = settings.system.getstring(context.getcontentresolver(), settings.secure.android_id);
      } else {
        // request old storage permission
        if (activitycompat.checkselfpermission(context, manifest.permission.read_phone_state) != packagemanager.permission_granted) {
          // todo: consider calling
          //  activitycompat#requestpermissions
          // here to request the missing permissions, and then overriding
          //  public void onrequestpermissionsresult(int requestcode, string[] permissions,
          //                     int[] grantresults)
          // to handle the case where the user grants the permission. see the documentation
          // for activitycompat#requestpermissions for more details.
          return null;
        }
        deviceid = tm.getdeviceid();
      }
      if (deviceid == null || "".equals(deviceid)) {
        return getlocalmacaddress(context);
      }
    } catch (exception e) {
      e.printstacktrace();
      if (deviceid == null || "".equals(deviceid)) {
        return getlocalmacaddress(context);
      }
    }

    return deviceid;
  }

谷歌官方有声明:手机恢复出厂设置,android id会重置。

如果用户拒绝权限,也还是会获取不到设备标识。

所以具体优化需自行结合开发情景,有更好的建议的道友可以评论补充说明^ - ^…

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。