Sae*_*eed 3 permissions android
要从此代码中获取我使用的 IMEI:
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, 1);
} else {
iMEI = tm.getDeviceId();
}
Run Code Online (Sandbox Code Playgroud)
但是当我的应用程序运行时,会出现这个对话框:
该程序要求授予“拨打和管理电话”的权限,这可能会吓到用户使用应用程序。
现在我的问题是:
为什么 READ_PHONE_STATE 权限要求“拨打和管理电话”?虽然我没有在我的应用程序中拨打电话和管理电话。
READ_PHONE_STATE权限被列为危险权限,并提供读取手机状态的权限。它属于Phone权限组。如果询问危险权限,系统会显示与其组相关的对话框。在你的情况下,Phone。这就是原因 - 用户被要求获得“拨打和管理电话”权限。这是询问权限的方式 -
https://developer.android.com/training/permissions/requesting
为了更清楚,请参阅 https://developer.android.com/guide/topics/permissions/overview
它说 -
如果设备运行的是 Android 6.0(API 级别 23)且应用的 targetSdkVersion 为 23 或更高版本,则当您的应用请求危险权限时,以下系统行为适用:
如果应用当前在权限组中没有任何权限,系统会向用户显示权限请求对话框,
描述应用想要访问的权限组。该
对话框没有描述该组内的特定权限。
例如,如果应用程序请求 READ_CONTACTS 权限,
系统对话框只会说应用程序需要访问设备的
联系人。如果用户授予批准,系统将只
授予应用程序请求的权限。如果应用程序在同一权限组中已被授予另一个危险权限,则系统会立即授予该
权限,而无需与用户进行任何交互。例如,如果一个
应用程序先前请求并被授予 READ_CONTACTS
权限,然后它请求 WRITE_CONTACTS,系统会
立即授予该权限,而不
向用户显示权限对话框。
有很多更好的方法来获取唯一标识符。例如-
String android_id = Settings.Secure.getString(getApplicationContext().getContentResolver(),
Settings.Secure.ANDROID_ID);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4536 次 |
| 最近记录: |