Попередній перегляд розробника 2 вносить деякі зміни до того, як програма вимагає дозволів (див. Також http://developer.android.com/preview/support.html#preview2-notes ).
Перший діалог зараз виглядає приблизно так:
Немає поля "Ніколи більше не показувати" (на відміну від попереднього перегляду розробника 1). Якщо користувач відмовляє у дозволі і якщо дозвіл є важливим для програми, він може відкрити ще одне діалогове вікно, щоб пояснити причину, за якою програма вимагає цього дозволу, наприклад, наприклад:
Якщо користувач знову відхилиться, додаток слід або закрити, якщо він абсолютно потребує цього дозволу, або продовжувати працювати з обмеженою функціональністю. Якщо користувач переглядає (і вибирає повторну спробу), дозвіл запитується знову. Цього разу підказка виглядає приблизно так:
Вдруге з'являється прапорець "Ніколи не запитай більше". Якщо користувач знову відмовить і поставлений прапорець, більше нічого не повинно відбуватися. Поставити прапорець чи ні, можна визначити за допомогою Activity.shouldShowRequestPermissionRationale (String), наприклад так:
if (shouldShowRequestPermissionRationale(Manifest.permission.WRITE_CONTACTS)) {...
Про це говорить документація на Android ( https://developer.android.com/training/permissions/requesting.html ):
Щоб допомогти знайти ситуації, коли потрібно надати додаткове пояснення, система надає метод Activity.shouldShowRequestPermissionRationale (String). Цей метод повертає істину, якщо програма раніше вимагала цього дозволу і користувач відмовив у запиті. Це вказує на те, що ви, ймовірно, повинні пояснити користувачеві, чому вам потрібен дозвіл.
Якщо в минулому користувач відхилив запит на дозвіл і вибрав опцію Не запитувати знову в діалоговому вікні системи запитів дозволів, цей метод повертає помилкове значення. Метод також повертає значення false, якщо політика пристрою забороняє додатку мати такий дозвіл.
Щоб знати, якщо користувач відмовив "ніколи не запитувати знову", ви можете знову перевірити метод shouldShowRequestPermissionRationale у своєму onRequestPermissionsResult, коли користувач не надав дозволу.
@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...*/ ) {
}
}
}
}
}
Ви можете відкрити налаштування програми за допомогою цього коду:
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivityForResult(intent, REQUEST_PERMISSION_SETTING);
Немає можливості направити користувача безпосередньо на сторінку авторизації.