【发布时间】:2019-05-16 11:44:48
【问题描述】:
我正在使用 Kotlin 开发一个 android 应用程序,我使用 api 28。
我想获取 deviceId 编号。一开始我使用 TelephonyManager.deviceId,经过一些研究,我发现它已被弃用。
我找到了解决方案,将 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()”下划线有红线,并出现以下消息:
调用需要权限,可能会被用户拒绝:代码应该 明确检查权限是否可用(使用 checkPermission) 或显式处理潜在的
我想知道是什么问题以及如何纠正它
【问题讨论】:
-
在调用方法前检查是否有权限。
-
如何查看?
-
您必须实现运行时权限。仅仅在清单中声明是不够的
-
检查this guide 了解如何正确请求权限并处理答案。
标签: android kotlin telephonymanager