2017-08-15 24 views
0

以下は私のコードですが、私はこのコードを実行時アクセス許可を得るために呼び出しました。この場合、 "shouldshowrequestpermissionrationaleは常にfalseを返す"。私はなぜそれがこのようなgoindな解決策を見つけることができません。このため、実行時アクセス許可アラートは表示されません。私に解決策を教えてください...実行時アクセス許可:shouldshowrequestpermissionrationaleは常に偽を返します

private void checkRuntimePermission() { 

    Logger.infoLog("checkRuntimePermission"); 
    if(ActivityCompat.checkSelfPermission(this, permissionsRequired[0]) != PackageManager.PERMISSION_GRANTED){ 
     Logger.infoLog("checkRuntimePermission first if"); 
     if(ActivityCompat.shouldShowRequestPermissionRationale(WelcomeActivity.this,permissionsRequired[0])){ 
      Logger.infoLog("checkRuntimePermission if"); 
      //just request the permission 
      //Show Information about why you need the permission 
      AlertDialog.Builder builder = new AlertDialog.Builder(this); 
      builder.setTitle("Need Multiple Permissions"); 
      builder.setMessage("This app needs Camera and Location permissions."); 
      builder.setPositiveButton("Grant", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        dialog.cancel(); 
        ActivityCompat.requestPermissions(WelcomeActivity.this,permissionsRequired,PERMISSION_CALLBACK_CONSTANT); 
       } 
      }); 
      builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        dialog.cancel(); 
       } 
      }); 
      builder.show(); 
     }else{ 
      Logger.infoLog("Show request permission rationale false"); 
     } 
    } else { 
     //You already have the permission, just go ahead. 
     Logger.infoLog("Permission given already"); 
     proceedAfterPermission(); 
    } 
} 

答えて

0

「この許可を要求する理由を表示する必要がありますか?」という質問が表示されます。

ドキュメント"This method returns true if the app has requested this permission previously and the user denied the request."https://developer.android.com/training/permissions/requesting.html

から、その値がfalseの場合、あなたはまだ許可を要求したいが、あなたは警告ダイアログを表示する必要はありません。だから、Googleドキュメントで単に

ActivityCompat.requestPermissions(WelcomeActivity.this,permissionsRequired,PERMISSION_CALLBACK_CONSTANT); 
1

他のブロックに:

「アプリは、以前にこの権限を要求していると、ユーザが要求を拒否した場合、このメソッドはtrueを返します。」

ので、あなたは、requestPermissions(...)はまず、あなたが望む結果を得ることができshouldShowRequestPermissionRationale(...)を使用するメソッドを呼び出す必要があります。

最良の方法は、常にonRequestPermissionsResult(...)にrequestPermissions(...)を使用していることである

関連する問題