如何在棉花糖中一次向用户显示所有接受权限?

How can show all permission to user for acceptation at one time in marshmallow?

我的app有10个权限,可以一一提示。但我希望在提示用户后获得 10 个权限,以便他可以在应用启动时接受权限。

提前致谢

我已经创建了一个运行时权限助手,它完全可以满足您的需求。 你可以在这里找到它 - https://gist.github.com/passiondroid/cd2ad32e7ba26f4e47ae

添加此 class 并根据您的权限进行修改后。您可以在 activity 中添加以下代码,您需要询问所有权限

runtimePermissionHelper = RuntimePermissionHelper.getInstance(this);
            if (runtimePermissionHelper.isAllMCPermissionAvailable()) {
                //All permissions available. Do what you want.
            } else {
                runtimePermissionHelper.setActivity(this);
                runtimePermissionHelper.requestPermissionsIfDenied();
            }

在同一个 activity 中覆盖此方法以在获得用户 accepts/rejects 权限后获得回调

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    Map<String, Integer> perms = new HashMap<String, Integer>();

    // Fill with results*/
    for (int i = 0; i < permissions.length; i++)
        perms.put(permissions[i], grantResults[i]);

    boolean isAllPermissionsAllowed = false;
    for(int i : grantResults){
        if(i==PackageManager.PERMISSION_GRANTED){
            isAllPermissionsAllowed = true;
        }else{
            isAllPermissionsAllowed = false;
            break;
        }
    }
    if(isAllPermissionsAllowed){
        //All permissions available. Do what you want.
    } else {
        // Permission Denied. Show error page
        Intent intent = new Intent(this,ErrorActivity.class);
        intent.putExtra("permissions_denied",true);
        startActivity(intent);
        finish();
    }
}

requestPermissions 将字符串数组作为第一个参数,所以...

requestPermissions(new String[]{Manifest.permission.X, Manifest.permission.Y}, requestCode);

但是...

运行时权限的全部意义在于,在您的应用真正需要它们之前,用户不需要授予它们。

您可以通过这种方式同时请求多个权限:
(我目前是这样用的)

 String[] PERMISSIONS_ARRAY = {Manifest.permission.X, Manifest.permission.Y, Manifest.permission.Z};

然后我有一个函数:

void checkRuntimePermissions(){
        if ((ActivityCompat.checkSelfPermission(this, Manifest.permission.X)
                != PackageManager.PERMISSION_GRANTED) && ActivityCompat.checkSelfPermission ...) {  

 //modify the array acc to permission granted or not

 if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                Manifest.permission.X) && ActivityCompat.shouldShowRequestPermissionRationale...{  

ActivityCompat.requestPermissions(Activity.this, PERMISSIONS_ARRAY,
                            REQUEST_CODE_PERMISSIONS);
} ..}  

并通过实施 ActivityCompat.OnRequestPermissionsResultCallback 验证请求...

@Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        if (requestCode == REQUEST_CODE_PERMISSIONS) {
            // if we have requested multiple permissions, all of them need to be
            // checked.
            if (PermissionUtil.verifyPermissions(grantResults)) {...  

我希望我们能从 o.s 得到一个自动检查。调用 requestPermissions... 时,我们不必检查是否允许权限。

google samples code for reference