Wersja zapoznawcza dla deweloperów 2 wprowadza pewne zmiany w sposobie żądania uprawnień przez aplikację (patrz także http://developer.android.com/preview/support.html#preview2-notes ).
Pierwsze okno dialogowe wygląda teraz tak:
Nie ma pola wyboru „Nigdy nie pokazuj ponownie” (w przeciwieństwie do wersji 1 dla programistów). Jeśli użytkownik odmówi pozwolenia i jeśli zezwolenie jest niezbędne dla aplikacji, może wyświetlić inne okno dialogowe wyjaśniające powód, dla którego aplikacja prosi o takie pozwolenie, np. W następujący sposób:
Jeśli użytkownik ponownie odmówi, aplikacja powinna się zamknąć, jeśli absolutnie potrzebuje tego pozwolenia, lub kontynuować działanie z ograniczoną funkcjonalnością. Jeśli użytkownik ponownie rozważy (i wybierze ponowną próbę), prośba o pozwolenie zostanie ponownie zażądana. Tym razem monit wygląda następująco:
Po raz drugi wyświetlane jest pole wyboru „Nigdy więcej nie pytaj”. Jeśli użytkownik ponownie zaprzecza, a pole wyboru jest zaznaczone, nic więcej nie powinno się wydarzyć. To, czy pole wyboru jest zaznaczone, można określić za pomocą Activity.shouldShowRequestPermissionRationale (String), np. W następujący sposób:
if (shouldShowRequestPermissionRationale(Manifest.permission.WRITE_CONTACTS)) {...
Tak mówi dokumentacja Androida ( https://developer.android.com/training/permissions/requesting.html ):
Aby znaleźć sytuacje, w których należy podać dodatkowe wyjaśnienie, system udostępnia metodę Activity.shouldShowRequestPermissionRationale (String). Ta metoda zwraca wartość true, jeśli aplikacja wcześniej zażądała tego uprawnienia, a użytkownik odrzucił żądanie. Oznacza to, że prawdopodobnie powinieneś wyjaśnić użytkownikowi, dlaczego potrzebujesz pozwolenia.
Jeśli użytkownik w przeszłości odrzucił żądanie uprawnień i wybrał opcję Nie pytaj ponownie w oknie dialogowym systemowym żądania uprawnień, ta metoda zwraca wartość false. Metoda zwraca również wartość false, jeśli zasady dotyczące urządzeń zabraniają aplikacji posiadania tego uprawnienia.
Aby wiedzieć, czy użytkownik odmówił za pomocą opcji „nigdy więcej nie pytaj”, możesz ponownie sprawdzić metodę shouldShowRequestPermissionRationale w swoim polu onRequestPermissionsResult, gdy użytkownik nie udzielił pozwolenia.
@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...*/ ) {
}
}
}
}
}
Możesz otworzyć ustawienia aplikacji za pomocą tego kodu:
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivityForResult(intent, REQUEST_PERMISSION_SETTING);
Nie ma możliwości wysłania użytkownika bezpośrednio na stronę autoryzacji.