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

Android 如何在棉花糖中一次向用户显示所有接受权限?,android,android-permissions,android-6.0-marshmallow,Android,Android Permissions,Android 6.0 Marshmallow,我在我的应用程序中有10个权限,我可以逐个提示。但我想10权限一次提示给用户,这样他就可以接受应用程序启动的权限 提前感谢我已经创建了一个运行时权限帮助器,它完全满足您的需要。 你可以在这里找到它- 添加此类并根据您的权限进行修改后。您可以在需要询问所有权限的活动中添加以下代码 runtimePermissionHelper = RuntimePermissionHelper.getInstance(this); if (runtimePermissionHelper.i

我在我的应用程序中有10个权限,我可以逐个提示。但我想10权限一次提示给用户,这样他就可以接受应用程序启动的权限


提前感谢

我已经创建了一个运行时权限帮助器,它完全满足您的需要。 你可以在这里找到它-

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

runtimePermissionHelper = RuntimePermissionHelper.getInstance(this);
            if (runtimePermissionHelper.isAllMCPermissionAvailable()) {
                //All permissions available. Do what you want.
            } else {
                runtimePermissionHelper.setActivity(this);
                runtimePermissionHelper.requestPermissionsIfDenied();
            }
@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();
    }
}
在同一活动中重写此方法,以便在用户接受/拒绝权限时获得回调

runtimePermissionHelper = RuntimePermissionHelper.getInstance(this);
            if (runtimePermissionHelper.isAllMCPermissionAvailable()) {
                //All permissions available. Do what you want.
            } else {
                runtimePermissionHelper.setActivity(this);
                runtimePermissionHelper.requestPermissionsIfDenied();
            }
@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();
    }
}
@覆盖
public void onRequestPermissionsResult(int-requestCode,@NonNull-String[]permissions,@NonNull-int[]grantResults){
super.onRequestPermissionsResult(请求代码、权限、授权结果);
Map perms=new HashMap();
//满载而归*/
for(int i=0;i
我创建了一个运行时权限帮助器,它正好满足您的需要。 你可以在这里找到它-

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

runtimePermissionHelper = RuntimePermissionHelper.getInstance(this);
            if (runtimePermissionHelper.isAllMCPermissionAvailable()) {
                //All permissions available. Do what you want.
            } else {
                runtimePermissionHelper.setActivity(this);
                runtimePermissionHelper.requestPermissionsIfDenied();
            }
@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();
    }
}
在同一活动中重写此方法,以便在用户接受/拒绝权限时获得回调

runtimePermissionHelper = RuntimePermissionHelper.getInstance(this);
            if (runtimePermissionHelper.isAllMCPermissionAvailable()) {
                //All permissions available. Do what you want.
            } else {
                runtimePermissionHelper.setActivity(this);
                runtimePermissionHelper.requestPermissionsIfDenied();
            }
@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();
    }
}
@覆盖
public void onRequestPermissionsResult(int-requestCode,@NonNull-String[]permissions,@NonNull-int[]grantResults){
super.onRequestPermissionsResult(请求代码、权限、授权结果);
Map perms=new HashMap();
//满载而归*/
for(int i=0;i
requestPermissions
将字符串数组作为第一个参数,因此

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


运行时权限的全部要点是,用户不需要授予它们,直到您的应用程序实际需要它们。

requestPermissions
将字符串数组作为第一个参数,因此

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


运行时权限的全部要点是,用户不需要授予它们,直到您的应用程序真正需要它们。

您可以通过以下方式同时请求多个权限:
(我现在是这样使用的)

然后我有一个函数:

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);
} ..}  
并通过实现验证请求

我希望在调用
requestPermissions…
时,o.s.会自动检查权限,这样我们就不必检查权限是否被允许


您可以通过以下方式同时请求多个权限:
(我现在是这样使用的)

然后我有一个函数:

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);
} ..}  
并通过实现验证请求

我希望在调用
requestPermissions…
时,o.s.会自动检查权限,这样我们就不必检查权限是否被允许


如果您谈论的是所有危险的权限,它将以10个“允许”或“拒绝”对话框的形式出现,这些对话框可以显示为“10中的1”、“10中的2”…在“允许”和“拒绝”行中左对齐。运行时权限的全部要点是,用户不需要授予它们,直到您的应用程序真正需要它们。如果你不想这样做,只需将你的targetSdk降低到22。我想访问四个权限联系人、位置、库、帐户。从未尝试过,但请看这篇文章:你还应该记住,该用户可以随时撤销权限。因此,即使您的应用程序在启动时被授予此权限,也不能保证它们在您尝试拍照或编写文件时被授予。如果您谈论的是所有危险的权限,它将以10个“允许”或“拒绝”对话框的形式出现,显示为“1/10”,“第2/10号决议“…写在allow和Denyth行的左边运行时权限的全部要点是用户不需要授予它们,直到您的应用程序实际需要它们。如果你不想这样做,只需将你的targetSdk降低到22。我想访问四个权限联系人、位置、库、帐户。从未尝试过,但请看这篇文章:你还应该记住,该用户可以随时撤销权限。因此,即使您的应用程序在启动时被授予此权限,也不能保证它们在您尝试拍照或编写文件时被授予。