【发布时间】:2016-06-30 10:56:53
【问题描述】:
我刚刚开始在 Android M 上使用运行时权限。我在 AndroidManifest.xml 中声明了 CAMERA、READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE
问题是如果用户转到设置并明确关闭如下权限,我无法检查我的应用是否启用了相机或存储权限
我使用这个 sn-p 来检查我的应用是否有特定权限:
public static boolean hasPermission(Context c, String permission) {
if (Build.VERSION.SDK_INT >= 23) {
return ContextCompat.checkSelfPermission(c, permission) == PackageManager.PERMISSION_GRANTED;
}
return true;
}
令人惊讶的是,即使我在“设置”中将它们关闭,每次检查相机和存储权限都会返回 true(已授予)。
我的targetSdkVersion 23 岁
这是 Google 提供的预期行为吗?我环顾网络,仍然找不到任何文档说明处理显式调用的权限。
【问题讨论】:
-
你的
targetSdkVersion是什么? -
我的目标是 SDK 23
-
您在哪个版本的 Android 上进行测试?现在,您只能在 23+ 时致电
checkSelfPermission()。ContextCompat.checkSelfPermission()可以在任何版本的 Android 上调用(至少回到 API 级别 4),所以我将删除if检查。您的屏幕截图看起来像是 API 级别 23 设备,在这种情况下,如果您的targetSdkVersion是 23,我无法解释您的症状。 -
我在运行 Android M 的设备上进行了测试,我确实在我的代码上放置了断点来跟踪它,它运行了
ContextCompat.checkSelfPermission()函数 -
我目前也面临同样的问题(权限检查始终显示即使在权限被撤销后也已授予),您最近找到解决方案了吗?
标签: android permissions android-manifest android-6.0-marshmallow