2016-06-16 8 views
2

私は最近アンドロイド6.0で開発を開始しました - ランタイム許可要求。Android 6.0:「shouldShowRequestPermissionRationale」が何回呼び出されるのですか?

shouldShowRequestPermissionRationale()メソッドが呼び出される回数を知りたいと思っていました。ここで

は私のコードです:

@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); 
} 

。ユーザーが選択せずに許可を拒否した場合、再度尋ねるとアンドロイドは要求許可ダイアログを2回表示してから無限ループに入ります。

  1. 私は、ユーザーがdon't ask againチェックボックスを選択せず​​に複数回を要求拒否した場合に何が起こるかを知りたいと思いましたか?

  2. ユーザーがdon't ask againチェックボックスをオンにしてリクエストを拒否するとどうなりますか?

shouldShowRequestPermissionRationale()メソッドはこのシナリオで呼び出されますか?

はいの場合、何回ですか?

いいえなぜですか?

ご協力いただければ幸いです。

+0

これは1回だけ呼び出されます。 –

答えて

0
  1. ユーザーがもう一度質問しないチェックボックスを選択せず​​に複数回リクエストを拒否した場合は、shouldShowRequestPermissionRationale()に対して常にtrueになります。開発者がRationaleダイアログと許可要求ダイアログループを迷惑にならないようにするか、Rationaleダイアログを表示した後にもう一度許可要求ダイアログを表示すると拒否と見なすことにしました。

  2. ユーザーが[再度確認しない]チェックボックスをオンにしてリクエストを拒否した場合は、shouldShowRequestPermissionRationale()に対してfalseが返され、ユーザーは許可を拒否します。

そう提案流れは次のようになります -

    アプリケーションの開始checkselfpermissionで
  1. 付与されたかどうか。付与されている場合は、メインアクティビティを開始
  2. 許可されていない場合は、アクセス許可の要求ダイアログを表示します。
  3. onRequestPermissionsResultコールバックで、許可または拒否されている許可ステータス(メインアクティビティの開始が許可されている場合)を確認します。
  4. 拒否された場合は、shouldShowRequestPermissionRationale()をチェックします。はいの場合は、Permission Rationaleダイアログを表示してから再度Permission requestダイアログを表示します。
  5. また、onRequestPermissionsResultコールバックで、許可または拒否された許可ステータス(メインアクティビティの開始が許可されている場合)を確認します。拒否された場合
  6. 、繰り返し手順4
  7. ユーザーが再度依頼決して選択している場合は、偽shouldShowRequestPermissionRationale()を取得し、それがユーザー意味許可を許可したくないと、あなたは許可が重要であるかどうかを決定することができますアプリケーションが機能しなかった場合、ユーザーに適切なアラートを表示してアプリケーションを停止するか、または制限された機能でアプリケーションを起動します。
  8. ユーザーが[再度確認しない]を選択していないのに拒否された場合、shouldShowRequestPermissionRationale()がtrueになり、Rationaleダイアログを再度表示するかどうかを決定する必要があります。
  9. このアプリケーションがなくても機能しないような権限があれば、適切な警告メッセージをユーザーに表示してアプリケーションを停止するか、またはRationaleに詳細を表示してユーザーに許可を許可するよう指示します。
  10. そのアプリケーションがなくても機能が制限されていて、メインアクティビティを表示したり、根拠ダイアログを表示したりする権限がある場合。
  11. ユーザーが選択しない限りはに尋ねないでください。拒否、shouldShowRequestPermissionRationale()は常にtrueを返し、Rationaleダイアログと許可ダイアログを再び表示し続けるかどうかを決定します。
関連する問題