Android targetSdkVersion 23 checkSelfPermission方法

时间:2016-03-15 12:17:32

标签: java android android-contacts android-permissions

我正面临Android 6.0(API 23)中的检查权限值。即使是应用程序设置的权限启用或禁用,也始终获得0值。

以下是我采取的步骤。

从设备sudo手动停用联系人权限。

在执行下面的代码行时,每次获得0值时仍然在Android 6.0中。

settings->apps-> My apps-> permission -> Disable contact permission

以下是我的代码。我在主启动器活动类

中定义
ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_CONTACTS)

2 个答案:

答案 0 :(得分:2)

如果您定位SDK 23(Android 6),默认情况下会禁用所有权限(在您的清单中),而如果您的targetSDK为22(Android 5.1)且您的应用在Android 6上运行,则所有权限在用户安装应用时默认启用,即使用户稍后撤消权限,checkSelfPermission也会返回错误的PERMISSION_GRANTED

它也可以在PermissionChecker

的文档中找到
  

在新权限模型中,具有危险保护级别的权限是运行时权限。对于定位到M及以上的应用,用户可能无法随时授予此类权限或撤消这些权限。对于针对低于M的API的应用,这些权限始终被授予,因为此类应用不会期望权限撤销并且会崩溃。因此,当用户在UI中禁用遗留应用程序的权限时,平台会禁用由此权限保护的API,使其成为无操作,无效或返回空结果或默认错误。

答案 1 :(得分:2)

我遇到了同样的问题,但我意识到有一些本地模块的目标版本低于23.删除它们后,错误就解决了。