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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。