0

Je souhaite demander la permission à l'utilisateur dans la situation s'il refuse pour la première fois. J'ai mis la permission mais mon application fonctionne même si j'appuie sur deny option. J'ai un code qui devrait faire les choses que je veux faire mais je reçois Cant résolution symbole Snackbar quand j'appuie sur Alt + Entrée il a créé une autre activité et reste -Faire et -permision_available_camera obtient une erreur rouge.Comment demander de nouveau l'autorisation (RunTime) si l'utilisateur refuse pour la première fois

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

     if (requestCode == REQUEST_CAMERA) { 
      // BEGIN_INCLUDE(permission_result) 
      // Received permission result for camera permission. 
      Log.i(TAG, "Received response for Camera permission request."); 

      // Check if the only required permission has been granted 
      if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       // Camera permission has been granted, preview can be displayed 
       Log.i(TAG, "CAMERA permission has now been granted. Showing preview."); 
       Snackbar.make(mLayout, R.string.permision_available_camera, 
         Snackbar.LENGTH_SHORT).show(); 
      } else { 
       Log.i(TAG, "CAMERA permission was NOT granted."); 
       Snackbar.make(mLayout, R.string.permissions_not_granted, 
         Snackbar.LENGTH_SHORT).show(); 

      } 
+0

suivre ce lien [Rathod Nilesh ] (https://stackoverflow.com/questions/44512639/cannot-fetch-location-in-marshmallow-after-giving-permission-request/44512710#44512710) il vous aidera –

+0

non. J'ai fait cela .. si l'utilisateur refuse, il affichera la permission nécessaire, mais l'application fonctionne malgré la permission a été refusée. Mais je souhaite réactiver l'autorisation Autoriser ou Refuser et l'application ne doit s'exécuter que si l'utilisateur autorise un autre dysfonctionnement dans le cas de refus –

+0

que vous ne pouvez gérer le résultat de la permission dans la méthode onRequestPermissionsResult() –

Répondre

0

Si c'est l'autorisation nécessaire pour votre application de fonctionner comme une autorisation de la caméra pour une application appareil photo, vous devez appeler finish() sur onRequestPermissionsResult, si ce n'est pas un permsisson essentiel comme l'affichage l'emplacement ou l'écriture dans un fichier que vous pouvez alors demander lorsque l'utilisateur touche un bouton ou essaie de démarrer cette fonction particulière.

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

    if (requestCode == PermissionsUtils.REQUEST_PERMISSION_CAMERA) { 

     // Check if the only required permission has been granted 
     if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
      // Camera permission has been granted, preview can be displayed  
     } else { 
      // Camera permission is not granted 
      finish(); 
     } 
    } 
    if (requestCode == PermissionsUtils.REQUEST_PERMISSION_LOCATION) { 
     if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
      // Location permission has been granted 
     } 
    } 
} 
+0

Non, ça ne va pas aider. nous avons besoin de 'if (ActivityCompat.shouldShowRequestPermissionRationale (this, Manifest.permission.CAMERA)) {' Je souhaite que l'autorisation soit à nouveau demandée. Vérifiez ce lien (https://stackoverflow.com/questions/30719047/android-m-check-runtime-permission-how-to-determine-if-the-user-checked-nev) –

0

@Arjun Thakun est ici un moyen de gérer le concept de redemander la permission et faire face à toutes les façons dont l'utilisateur peut répondre lorsque l'application demande sur les autorisations

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { 
      //.... write file into storage ... 
      System.out.println("SDK > BuildVersion TRUE"); 
     } else { 
      requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 666); // Comment 26 
      System.out.println("go to requestPermissions"); 
     } 
    } 
    onLoad(); 
} 

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

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

     case 666: // Allowed was selected so 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(); 
       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 

      } else if (Build.VERSION.SDK_INT >= 23 && !shouldShowRequestPermissionRationale(permissions[0])) { 
       // User selected the Never Ask Again Option Change settings in app settings manually 
       AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this); 
       alertDialogBuilder.setTitle("Change Permissions in Settings"); 
       alertDialogBuilder 
         .setMessage("" + 
           "\nClick SETTINGS to Manually Set\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);  // Comment 3. 
          } 
         }); 

       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); 
        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) { 
            //ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, Integer.parseInt(WRITE_EXTERNAL_STORAGE)); 
            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; 
    }};