-1

私はカメラの権限をチェックするために、このJavaコードを使用して、ネイティブアプリを反応させてきましたオフにすると、requestPermissions関数のおかげでネイティブの権限ポップアップが表示されます。許可ポップアップは、Android 7.0には表示されません、shouldShowRequestPermissionRationaleは常にfalse

ただし、Android 7.0では表示されません。

は、私は結果をチェックする:これは私たちがチェックし、すべてのエンドユーザーの入力時に管理する方法である

ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.CAMERA) 

それは、Android 6.0に虚偽だとあなたの答えのための7.0

おかげで、

+0

の可能性のある重複[アンドロイドM権限:shouldShowRequestPermissionRationale()関数の使用に関する混乱(https://stackoverflow.com/questions/32347532/android-m -permissions-of-the-use-of-shouldshowrequestpermissionratiの混乱) – petey

答えて

0

許可を扱うのは、処理する許可に変更するだけです

最初のチェック

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { 
     } else { 
      requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 666); // Comment 26 
     } 
    } 

そしてエンドユーザーの入力を管理

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 

    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    switch (requestCode) { 

     case 666: // User selected Allowed Permission Granted 
      if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

       Snackbar s = Snackbar.make(findViewById(android.R.id.content), "Permission Granted", Snackbar.LENGTH_LONG); 
       View snackbarView = s.getView(); 
       snackbarView.setBackgroundColor(Color.WHITE); 
       TextView textView = (TextView) snackbarView.findViewById(android.support.design.R.id.snackbar_text); 
       textView.setTextColor(Color.RED); 
       textView.setTextSize(18); 
       textView.setMaxLines(6); 
       s.show(); 

       // do your work here 

       // User selected the Never Ask Again Option Change settings in app settings manually 
      } else if (Build.VERSION.SDK_INT >= 23 && !shouldShowRequestPermissionRationale(permissions[0])) { 

       AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this, R.style.MyAlertDialogStyle); 
       alertDialogBuilder.setTitle("Change Permissions in Settings"); 
       alertDialogBuilder 
         .setMessage("Click SETTINGS to Manually Set\n\n" + "Permissions to use Database Storage") 
         .setCancelable(false) 
         .setPositiveButton("SETTINGS", new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int id) { 
           Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); 
           Uri uri = Uri.fromParts("package", getPackageName(), null); 
           intent.setData(uri); 
           startActivityForResult(intent, 1000); 
          } 
         }); 

       AlertDialog alertDialog = alertDialogBuilder.create(); 
       alertDialog.show(); 

      } else { 
       // User selected Deny Dialog to EXIT App ==> OR <== RETRY to have a second chance to Allow Permissions 
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) { 

       AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this, R.style.MyAlertDialogStyle); 
       alertDialogBuilder.setTitle("Second Chance"); 
       alertDialogBuilder 
         .setMessage("Click RETRY to Set Permissions to Allow\n\n" + "Click EXIT to the Close App") 
         .setCancelable(false) 
         .setPositiveButton("RETRY", new DialogInterface.OnClickListener() { 

          public void onClick(DialogInterface dialog, int id) { 
           Intent i = new Intent(MainActivity.this, MainActivity.class); 
           i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 
           startActivity(i); 
          } 
         }) 
         .setNegativeButton("EXIT", new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int id) { 
           finish(); 
           dialog.cancel(); 
          } 
         }); 
       AlertDialog alertDialog = alertDialogBuilder.create(); 
       alertDialog.show(); 
      } 
    } 
    break; 
    }}; 
関連する問題