Kotlin:TelephonyManager.getImei() 调用需要权限,用户可能会拒绝
Kotlin : TelephonyManager.getImei() Call requires permission which may be rejected by user
我正在使用 Kotlin 开发 android 应用程序,我使用 api 28。
我想在开始使用 TelephonyManager.deviceId 时获取 deviceId number.At,经过一些研究,我发现它已被弃用。
我找到了解决方案,将 deviceId 替换为 getImei()
以下是我的代码摘录:
val telephonyManager = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
if (telephonyManager != null) {
val androidID = Settings.Secure.getString(this.contentResolver, Settings.Secure.ANDROID_ID)
if (androidID != null) {
Utility().DEVICE_ID = androidID
Utility().setDataBykeyValue(applicationContext, AppController.SHAIRD_PREF_DEVICE_ID, androidID)
} else {
val devId = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) telephonyManager.getImei()
else telephonyManager.getDeviceId()
Utility().DEVICE_ID = devId
Utility().setDataBykeyValue(applicationContext, AppController.SHAIRD_PREF_DEVICE_ID, devId)
}
Utility().CARRIER = telephonyManager.simOperatorName
}
我也将此权限添加到我的 AndroidManifest.xml :
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
"telephonyManager.getImei()"下划红线,出现如下信息:
Call requires permission which may be rejected by user: code should
explicitly check to see if permission is available (with
checkPermission) or explicitly handle a potential
我想知道问题出在哪里,我该如何解决
对于Java:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE}, 1);
} else {
// else for if they have already given permission
}
}
您也可以查看本教程:https://www.androidhive.info/2016/11/android-working-marshmallow-m-runtime-permissions/
对于 Kotlin:
val permission = ContextCompat.checkSelfPermission(this,
Manifest.permission.READ_PHONE_STATE)
if (permission != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.READ_PHONE_STATE), 1)
}
您也可以查看本教程:https://www.techotopia.com/index.php/Kotlin_-_Making_Runtime_Permission_Requests_in_Android
public static String getImei(TelephonyManager tm) {
String imei;
try{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
imei = tm.getDeviceId(0);
}else{
imei = tm.getDeviceId();
}
}catch(SecurityException e){
imei = "";
}
return imei;
}
我正在使用 Kotlin 开发 android 应用程序,我使用 api 28。
我想在开始使用 TelephonyManager.deviceId 时获取 deviceId number.At,经过一些研究,我发现它已被弃用。
我找到了解决方案,将 deviceId 替换为 getImei()
以下是我的代码摘录:
val telephonyManager = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
if (telephonyManager != null) {
val androidID = Settings.Secure.getString(this.contentResolver, Settings.Secure.ANDROID_ID)
if (androidID != null) {
Utility().DEVICE_ID = androidID
Utility().setDataBykeyValue(applicationContext, AppController.SHAIRD_PREF_DEVICE_ID, androidID)
} else {
val devId = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) telephonyManager.getImei()
else telephonyManager.getDeviceId()
Utility().DEVICE_ID = devId
Utility().setDataBykeyValue(applicationContext, AppController.SHAIRD_PREF_DEVICE_ID, devId)
}
Utility().CARRIER = telephonyManager.simOperatorName
}
我也将此权限添加到我的 AndroidManifest.xml :
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
"telephonyManager.getImei()"下划红线,出现如下信息:
Call requires permission which may be rejected by user: code should explicitly check to see if permission is available (with checkPermission) or explicitly handle a potential
我想知道问题出在哪里,我该如何解决
对于Java:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE}, 1);
} else {
// else for if they have already given permission
}
}
您也可以查看本教程:https://www.androidhive.info/2016/11/android-working-marshmallow-m-runtime-permissions/
对于 Kotlin:
val permission = ContextCompat.checkSelfPermission(this,
Manifest.permission.READ_PHONE_STATE)
if (permission != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.READ_PHONE_STATE), 1)
}
您也可以查看本教程:https://www.techotopia.com/index.php/Kotlin_-_Making_Runtime_Permission_Requests_in_Android
public static String getImei(TelephonyManager tm) {
String imei;
try{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
imei = tm.getDeviceId(0);
}else{
imei = tm.getDeviceId();
}
}catch(SecurityException e){
imei = "";
}
return imei;
}