В Developer Preview 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). Этот метод возвращает значение true, если приложение ранее запрашивало это разрешение, а пользователь отклонил запрос. Это означает, что вы, вероятно, должны объяснить пользователю, почему вам нужно разрешение.
Если в прошлом пользователь отклонял запрос на разрешение и выбирал опцию «Больше не спрашивать» в системном диалоговом окне запроса на разрешение, этот метод возвращает false. Метод также возвращает 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);
Нет способа отправить пользователя прямо на страницу авторизации.