Android的ContextCompat.checkSelfPermission()返回不正确的值

Jav*_*deh 7 permissions android android-6.0-marshmallow

我正在尝试检查Android Marshmallow中用户授予/撤消的权限.不幸的是ContextCompat.checkSelfPermission()(这是一个warpper Context.checkCallingOrSelfPermission)似乎总是返回PackageManager.PERMISSION_GRANTED(0)如果您在清单中包含了该特定权限,而不管当前的权限状态(例如,如果用户已撤销权限).我也尝试过someContext.checkCallingOrSelfPermission(),但结果是一样的.

有没有人经历过这个?我在nVidia Shield控制台上使用Android Marshmallow(使用nVidia的Beta程序).

Jav*_*deh 10

事实证明,清单中的targetSdkVersion必须是23,我的是22.如果您的目标SDK是23(Android 6),默认情况下会禁用所有权限(在清单中),而如果您的目标SDK是22 (Android 5.1)并且您的应用程序在Android 6上运行,默认情况下在用户安装应用程序时启用所有权限,即使用户稍后撤消权限,提到的API也会返回不正确的值(这是一个错误在我看来).

  • 你也可以使用`PermissionChecker`,它会告诉你用户是否通过设置拒绝了权限组:http://developer.android.com/reference/android/support/v4/content/PermissionChecker.html (6认同)