Die Entwicklervorschau 2 enthält einige Änderungen an der Anforderung von Berechtigungen durch die App (siehe auch http://developer.android.com/preview/support.html#preview2-notes ).
Der erste Dialog sieht nun so aus:
Es gibt kein Kontrollkästchen "Nie wieder anzeigen" (im Gegensatz zur Entwicklervorschau 1). Wenn der Benutzer die Berechtigung verweigert und die Berechtigung für die App wesentlich ist, kann ein weiterer Dialog angezeigt werden, in dem der Grund erläutert wird, warum die App diese Berechtigung anfordert, z. B.:
Wenn der Benutzer erneut ablehnt, sollte die App entweder heruntergefahren werden, wenn diese Berechtigung unbedingt erforderlich ist, oder mit eingeschränkter Funktionalität weiter ausgeführt werden. Wenn der Benutzer es erneut überprüft (und einen erneuten Versuch auswählt), wird die Berechtigung erneut angefordert. Diesmal sieht die Eingabeaufforderung folgendermaßen aus:
Beim zweiten Mal wird das Kontrollkästchen "Nie wieder fragen" angezeigt. Wenn der Benutzer erneut ablehnt und das Kontrollkästchen aktiviert ist, sollte nichts mehr passieren. Ob das Kontrollkästchen aktiviert ist oder nicht, kann mithilfe von Activity.shouldShowRequestPermissionRationale (String) ermittelt werden, z. B.: Z.
if (shouldShowRequestPermissionRationale(Manifest.permission.WRITE_CONTACTS)) {...
Das steht in der Android-Dokumentation ( https://developer.android.com/training/permissions/requesting.html ):
Um die Situationen zu finden, in denen Sie zusätzliche Erklärungen benötigen, stellt das System die Activity.shouldShowRequestPermissionRationale (String) -Methode bereit. Diese Methode gibt true zurück, wenn die App diese Berechtigung zuvor angefordert hat und der Benutzer die Anforderung abgelehnt hat. Dies bedeutet, dass Sie dem Benutzer wahrscheinlich erklären sollten, warum Sie die Berechtigung benötigen.
Wenn der Benutzer die Berechtigungsanforderung in der Vergangenheit abgelehnt und im Dialogfeld "Berechtigungsanforderungssystem" die Option "Nicht erneut fragen" ausgewählt hat, gibt diese Methode false zurück. Die Methode gibt auch false zurück, wenn die Geräterichtlinie der App diese Berechtigung verbietet.
Um festzustellen , ob der Benutzer mit "Nie wieder fragen" abgelehnt hat, können Sie die Methode shouldShowRequestPermissionRationale in Ihrem onRequestPermissionsResult erneut überprüfen, wenn der Benutzer die Berechtigung nicht erteilt hat.
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == REQUEST_PERMISSION) {
// for each permission check if the user granted/denied them
// you may want to group the rationale in a single dialog,
// this is just an example
for (int i = 0, len = permissions.length; i < len; i++) {
String permission = permissions[i];
if (grantResults[i] == PackageManager.PERMISSION_DENIED) {
// user rejected the permission
boolean showRationale = shouldShowRequestPermissionRationale( permission );
if (! showRationale) {
// user also CHECKED "never ask again"
// you can either enable some fall back,
// disable features of your app
// or open another dialog explaining
// again the permission and directing to
// the app setting
} else if (Manifest.permission.WRITE_CONTACTS.equals(permission)) {
showRationale(permission, R.string.permission_denied_contacts);
// user did NOT check "never ask again"
// this is a good place to explain the user
// why you need the permission and ask if he wants
// to accept it (the rationale)
} else if ( /* possibly check more permissions...*/ ) {
}
}
}
}
}
Sie können Ihre App-Einstellung mit folgendem Code öffnen:
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivityForResult(intent, REQUEST_PERMISSION_SETTING);
Es gibt keine Möglichkeit, den Benutzer direkt zur Autorisierungsseite zu senden.