2

Anwendung erfordert zwei Berechtigungen:Benutzer Änderungen die Erlaubnis von Einstellungen Bildschirm

  1. Telefonstatus lesen
  2. Kamera

Anwendung hat unter Bildschirme:

Bildschirm A: Splash (welche die Bildschirmnavigation basierend auf dem Berechtigungsstatus behandelt)

Bildschirm B: Permission Bildschirm

Bildschirm C (Wenn Benutzer Telefon Erlaubnis nicht erteilt hat): Nutzungsbedingungen & Bildschirm

App

Wenn es beginnt, wird prüfen, ob Telefon die Erlaubnis erteilt wird oder nicht. Wenn gewährt, wird App-Bildschirm C geöffnet, sonst bleibt es auf demselben Bildschirm B.

Schritte:

  1. öffnen App -> Splash -> Permission Bildschirm
  2. Klicken Sie auf 'Berechtigung erteilen' -> Permission Dialog -> Berechtigung Verweigern
  3. Klicken Sie auf 'Einstellungen öffnen'
  4. Grants 'Kamera' Erlaubnis (nicht telefonisch Erlaubnis)
  5. Tippen Sie auf 'Zurück' Taste des Gerätes und zurück zum App.
  6. Erlaubnis Bildschirm wird angezeigt als keine "Telefon" Erlaubnis erteilt.
  7. Wiederholen Sie erneut Schritt # 2 und # 3
  8. Entfernen Sie jetzt 'Kamera' Erlaubnis und gewähren 'Telefon' Erlaubnis (Wie wir Kamera-Erlaubnis App-Prozess geändert haben wird getötet und neu gestartet).
  9. Wiederholen Sie Schritt # 5, Splash und dann Bildschirm C (Bedingungen & Bedingungen) wird angezeigt.
  10. wieder tippen Sie auf ‚Zurück‘ klicken, werden gleiche Bildschirm C (Bildschirm C hat zwei Instanzen im Rücken Stapel)

Ich kann ‚CLEAR_TASK‘ und ‚CLEAR_TOP‘ Flaggen und startActivity verwenden angezeigt Zweck ist zu wissen, was passiert mit unserer Anwendung, wenn der Benutzer ändert, Erlaubnis von den Einstellungen.

Beobachtung:

  1. Wenn der Benutzer die Erlaubnis erteilt, unser Bewerbungsverfahren keinen Einfluss haben wird.

  2. Wenn der Benutzer die erteilte Berechtigung entfernt, wird die Android App die Anwendung beenden und neu starten. (Wenn das passiert, warum dann zwei Instanzen von T & C Bildschirme?)

Ich bin hier etwas verwirrt !!

Antwort

0
/**** If user changes, permission from settings it will again ask for permission to 
     granted.You should always check if user changes permission from settings 
     using below code ***/ 

if(checkSelfPermission(Manifest.permission.your_permission_name) == PackageManager.PERMISSION_GRANTED) 
+0

Ich bekomme das. Die Frage ist, was passiert, wenn der Benutzer die erteilte Berechtigung entfernt? Android wird die App töten und neu starten oder Backstack wird gleich sein? – AndiGeeky

+0

Android behält die Spur und wird erneut um Erlaubnis bitten, zu akzeptieren, auch wenn Ihre Anwendung im Hintergrund ist oder beendet – yash786

1

@AndiGeeky Hier einig vollständigen Code den Benutzer zu informieren, wenn wurde Zulassen oder Verweigern ausgewählt und es wird zwei weitere Szenarien Benutzer nie wieder fragen ausgewählt verwalten oder hat der Benutzer die Einstellung ändern, nachdem es nicht gestattet wurde

 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; 
    }}; 
+0

Ich bekomme das. Die Frage ist, was passiert, wenn der Benutzer die erteilte Berechtigung entfernt? Android wird die App töten und neu starten oder Backstack wird gleich sein? – AndiGeeky

+0

@AndiGeeky Ich habe diesen Code verwendet und es befasst sich mit dem Problem, dass der Benutzer die Berechtigungen bearbeitet und die Berechtigung verweigert. Dies ist einer der intelligentesten und gut gestalteten Code, um mit all den Möglichkeiten umzugehen, die im Umgang mit allen 3 passieren können mögliche Entscheidungen, die der Benutzer treffen kann –

Verwandte Themen