Android 安卓6.0:多少次;应显示“请求许可理由”;接到电话了吗?

Android 安卓6.0:多少次;应显示“请求许可理由”;接到电话了吗?,android,android-6.0-marshmallow,android-permissions,Android,Android 6.0 Marshmallow,Android Permissions,我最近开始开发android 6.0——运行时权限请求 我想知道调用了多少次showldRequestPermissionRegulation()方法 这是我的代码: @Override protected void onResume() { super.onResume(); if ((ContextCompat.checkSelfPermission(LaunchActivity.this, Manifest.permission.WRITE_EX

我最近开始开发android 6.0——运行时权限请求

我想知道调用了多少次
showldRequestPermissionRegulation()
方法

这是我的代码:

 @Override
    protected void onResume() {
        super.onResume();

        if ((ContextCompat.checkSelfPermission(LaunchActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
                == PackageManager.PERMISSION_GRANTED)){

            dbOperation();

            if (NetworkUtil.isServiceReachable(this)){
                checkAppVersion();
            } else {
                startApplication();
            }

        } else {

            if (!ActivityCompat.shouldShowRequestPermissionRationale(LaunchActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
                showMessageOKCancel("You need to allow access to Storage/Media for storing your Records.",
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                ActivityCompat.requestPermissions(LaunchActivity.this,new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE},
                                        PermissionConstants.WRITE_EXTERNAL_STORAGE_PERMISSION);
                            }
                        });
                return;

            }
           ActivityCompat.requestPermissions(LaunchActivity.this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},PermissionConstants.WRITE_EXTERNAL_STORAGE_PERMISSION);
            return;
        }

    } 
在回调方法中,我这样做:

  @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
       // super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode){

            case PermissionConstants.WRITE_EXTERNAL_STORAGE_PERMISSION:{
                if (grantResults.length>0 && grantResults[0]== PackageManager.PERMISSION_GRANTED){

                    dbOperation();
                    // Permission is granted Read and Write external storage.
                    if (NetworkUtil.isServiceReachable(this)){
                        checkAppVersion();
                    } else {
                        startApplication();
                    }

                }else {

                    if (!ActivityCompat.shouldShowRequestPermissionRationale(LaunchActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
                        showMessageOKCancel("You need to allow access to Storage/Media for storing your Records.",
                                new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        ActivityCompat.requestPermissions(LaunchActivity.this,new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE},
                                                PermissionConstants.WRITE_EXTERNAL_STORAGE_PERMISSION);
                                    }
                                });
                        return;
                    }else {

                        ActivityCompat.requestPermissions(LaunchActivity.this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},PermissionConstants.WRITE_EXTERNAL_STORAGE_PERMISSION);

                    }
                    //break;
                }
            }
            break;
default:super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
在这种情况下。当用户拒绝权限而不选择“不再询问”时,android会显示“请求权限”对话框两次,然后进入无限循环

  • 我想知道,如果用户多次拒绝请求而未选中
    不再询问
    复选框,会发生什么情况

  • 如果用户选中“不再询问”复选框并拒绝请求,会发生什么情况

  • 在这个场景中是否调用了
    showldRequestPermissionRegulation()
    方法

    如果,有多少次

    如果为什么不

    任何帮助都将不胜感激

  • 如果用户多次拒绝请求而未选中“不再询问”复选框,则shouldShowRequestPermissionRegulation()将始终为true。因此开发人员决定在理由对话框之后显示用户权限对话框和权限请求对话框循环,或者在显示权限请求对话框时将其视为拒绝。p>
  • 如果用户选中“不再询问”复选框并拒绝请求,则shouldShowRequestPermissionRegulation()的值将为false,即用户拒绝了该权限

  • 因此,建议的流量应为:-

  • 在应用程序启动时检查是否授予了selfpermission。如果获得授权,则启动主活动
  • 如果未授予,则显示权限请求对话框
  • 在onRequestPermissionsResult回调中,检查权限状态已授予或已拒绝(如果已授予),启动主活动
  • 如果拒绝,则检查shouldShowRequestPermissionRegulation(),如果是,则显示权限理由对话框,然后再次显示权限请求对话框
  • 再次在onRequestPermissionsResult回调中,检查权限状态“已授予”或“已拒绝”,如果已授予,则启动主活动
  • 如果拒绝,重复步骤4
  • 如果用户选择了“永不再次询问”,则您将获得shouldShowRequestPermissionRegulation()false,这意味着用户不希望允许权限,然后您可以决定权限是否重要,如果没有权限,应用程序将无法运行,然后向用户显示适当的警报并停止应用程序,或者使用有限的功能启动应用程序
  • 如果用户未选择“永不再次询问但拒绝”,则您将获得shouldShowRequestPermissionRegulation()true,然后您必须决定是否再次显示“基本原理”对话框
  • 在这里,您可以选择,如果没有权限,应用程序将无法运行,则可以向用户显示适当的警报消息并停止应用程序,或者显示更详细的理由,解释用户允许权限
  • 如果没有权限,应用程序可以使用有限的功能运行,则显示主要活动或再次显示基本原理对话框
  • 所以,除非用户在拒绝时选择永不再次询问,否则shouldShowRequestPermissionRegulation()将始终返回true,并且其开发人员决定是否再次显示基本原理对话框和权限对话框

  • 它只会打一次电话。