Android RunTime权限不授予同一组中的其他权限

时间:2017-01-19 07:14:50

标签: android permissions

如果我一个接一个地请求来自同一组的两个权限(Ex READ_CONTACTS,WRITE_CONTACTS)权限对话框要求用户两次接受来自同一组的权限,但文档提到我是否接受来自同一组的权限,android自动授予该组中的其他权限。

前代码:

ActivityCompat.requestPermissions((Activity) currentContext,
            new String[]{Manifest.permission.READ_CONTACT},
            MY_PERMISSIONS_REQUEST); 

因为它应该工作,出现一个请求权限的对话框, 但是,如果我调用以下代码,它会再次出现

ActivityCompat.requestPermissions((Activity) currentContext,
            new String[]{Manifest.permission.WRITE_CONTACT},
            MY_PERMISSIONS_REQUEST); 

所以来自同一组的权限对话框出现两次。 如果我以上述方式请求它们(即单独而不是一起),我是否可以只显示同一组的权限的单一对话框?

1 个答案:

答案 0 :(得分:2)

文档说:

  

系统显示的对话框描述了您的权限组   应用程序需要访问;它没有列出具体的权限。对于   例如,如果您请求READ_CONTACTS权限,则系统   对话框只是说您的应用需要访问设备的联系人。   用户只需为每个权限授予一次权限   组。如果您的应用请求该群组中的任何其他权限(那个   在您的应用清单中列出),系统自动授予   他们。当您请求权限时,系统会调用您的权限   onRequestPermissionsResult()回调方法和传递   PERMISSION_GRANTED,与用户明确表示的方式相同   通过系统对话框授予您的请求。

这意味着只会为组显示一个警报,但您必须请求该组的每个权限。

因此,您应该同时请求多个权限:

ActivityCompat.requestPermissions((Activity) currentContext,
            new String[]{Manifest.permission.READ_CONTACT, Manifest.permission.WRITE_CONTACT},
            MY_PERMISSIONS_REQUEST); 

修改

要检查是否已授予权限,您必须使用:

if (ContextCompat.checkSelfPermission(thisActivity,
                Manifest.permission.READ_CONTACTS)
        != PackageManager.PERMISSION_GRANTED) {
 // ...
}