Android Q适配之IMEI替换为Android_id
前置工作:
项目配置升到对应的29版本
compileSdkVersion:29,
buildToolsVersion:‘29.0.0',
minSdkVersion:19,
targetSdkVersion:29,
javaVersion:JavaVersion.VERSION_1_8
老版本获取IMEI的方法:
publicstaticStringgetIMEI(Contextcontext){ StringdeviceId=null; try{ TelephonyManagertm=(TelephonyManager)context .getSystemService(Context.TELEPHONY_SERVICE); deviceId=tm.getDeviceId(); if(deviceId==null||"".equals(deviceId)){ returngetLocalMacAddress(context); } }catch(Exceptione){ e.printStackTrace(); if(deviceId==null||"".equals(deviceId)){ returngetLocalMacAddress(context);//获取Mac地址,在Android9P版本中,地址会随机变化,不可用作唯一标识,可去掉。 } } returndeviceId; }
AndroidQ获取IMEI方法
publicstaticStringgetIMEI(Contextcontext){ StringdeviceId=null; try{ TelephonyManagertm=(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{ //requestoldstoragepermission if(ActivityCompat.checkSelfPermission(context,Manifest.permission.READ_PHONE_STATE)!=PackageManager.PERMISSION_GRANTED){ //TODO:Considercalling //ActivityCompat#requestPermissions //heretorequestthemissingpermissions,andthenoverriding //publicvoidonRequestPermissionsResult(intrequestCode,String[]permissions, //int[]grantResults) //tohandlethecasewheretheusergrantsthepermission.Seethedocumentation //forActivityCompat#requestPermissionsformoredetails. returnnull; } deviceId=tm.getDeviceId(); } if(deviceId==null||"".equals(deviceId)){ returngetLocalMacAddress(context); } }catch(Exceptione){ e.printStackTrace(); if(deviceId==null||"".equals(deviceId)){ returngetLocalMacAddress(context); } } returndeviceId; }
谷歌官方有声明:手机恢复出厂设置,AndroidID会重置。
如果用户拒绝权限,也还是会获取不到设备标识。
所以具体优化需自行结合开发情景,有更好的建议的道友可以评论补充说明^-^…
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。