【问题标题】:Android RunTime Permission not granting other permission in the same groupAndroid RunTime Permission 未授予同一组中的其他权限
【发布时间】:2017-06-03 19:14:59
【问题描述】:

如果我一个接一个地从同一个组请求两个权限(例如 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); 

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

【问题讨论】:

    标签: android permissions


    【解决方案1】:

    文档说:

    系统显示的对话框描述了您的权限组 应用需要访问;它没有列出具体的权限。为了 例如,如果您请求 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) {
     // ...
    }
    

    【讨论】:

    • 我知道这一点,并且由于我从我的清单中动态获取权限,因此同时调用它们是有效的,但是在被拒绝时会出现不需要的行为,如果我调用它们,我如何检查权限是否已经被授予同时?
    • 假设我有多个权限,正如你所描述的,其中一些属于不同的组,那么如果我拒绝一个权限,回调会再次询问,并且来自不同组的新请求被绘制在它后面,这给了我一个很多问题。
    • 好的行为不是从清单中获取权限,而是在需要时请求它。如果您真的想以自己的方式检查权限,请创建一个从权限返回组的静态方法。
    猜你喜欢
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    • 2020-08-22
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多