未授予READ_PRIVILEGED_PHONE_STATE权限

时间:2019-06-22 00:04:35

标签: android

我想向我的应用程序授予android.permission.READ_PRIVILEGED_PHONE_STATE权限,但是即使它是系统应用程序(在用于测试的已rooted设备上的system-priv文件夹中),也未被授予。

ADB显示了对此权限的请求,但未获得批准。

在我的清单中

<uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" tools:ignore="ProtectedPermissions" />

当我尝试在运行时对其进行检查

if (ActivityCompat.checkSelfPermission(context.getApplicationContext(), Manifest.permission.READ_PRIVILEGED_PHONE_STATE) == PackageManager.PERMISSION_GRANTED)

AS给出“无法解析符号'READ_PRIVILEGED_PHONE_STATE'”,应用将无法编译。

为什么READ_PRIVILEGED_PHONE_STATE在清单中可见,但在Java代码中不可见(在Manifest.class中也缺少)?

如何授予此权限?

我在扎根的Android Oreo上进行了测试。

编辑:这回答了我的部分问题:Permission is not a changeable permission type

该许可是在棒棒糖上授予的,但不是在奥利奥上授予的。

但是问题仍然存在:为什么READ_PRIVILEGED_PHONE_STATE在清单中可见,但是在Java代码中不可见(在Manifest.class中也缺少)?

1 个答案:

答案 0 :(得分:0)

我认为可能正在发生的事情是德罗宾斯基没有打电话:

 String[] permissions = {"android.permission.READ_PHONE_STATE"};
 int requestCode = 5;
 ActivityCompat.requestPermissions(this,permissions, requestCode);

在调用“ ActivityCompat.checkSelfPermission(…”之前)

在活动中,您还可以添加如下所示的权限通知处理程序:

 @Override
 public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
 switch (requestCode) {
      case 5: //REQUEST_READ_PHONE_STATE:
 if ((grantResults.length > 0) && (grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
      // Do what you want to do with the granted permission

即使您已在清单中添加了权限,用户也必须在运行时授予此权限。发生的情况是,将出现一个弹出窗口,要求用户授予此权限,如果用户授予了此权限,则“ checkSelfPermission”方法将正确运行。弹出框是自动的;即无需在应用中添加任何代码。我认为您可以添加一条文本消息,以显示需要权限的原因。某些权限请求需要以这种方式处理,而某些权限请求无需用户干预即可被授予。我认为Android模式是,如果请求被视为“危险”请求,则需要用户授予其权限以向应用授予访问这些所谓的“危险特权”的权限。