A prévia do desenvolvedor 2 traz algumas alterações na forma como as permissões são solicitadas pelo aplicativo (consulte também http://developer.android.com/preview/support.html#preview2-notes ).
A primeira caixa de diálogo agora fica assim:
Não existe a caixa de seleção "Nunca mostrar novamente" (diferente da visualização 1 do desenvolvedor). Se o usuário negar a permissão e se a permissão for essencial para o aplicativo, ele poderá apresentar outra caixa de diálogo para explicar o motivo pelo qual o aplicativo solicita essa permissão, por exemplo:
Se o usuário recusar novamente, o aplicativo deverá desligar se precisar absolutamente dessa permissão ou continuar executando com funcionalidade limitada. Se o usuário reconsiderar (e selecionar tentar novamente), a permissão será solicitada novamente. Desta vez, o prompt é assim:
Na segunda vez, a caixa de seleção "Nunca perguntar novamente" é exibida. Se o usuário negar novamente e a caixa de seleção estiver marcada, nada mais deve acontecer. Se a caixa de seleção está marcada ou não, pode ser determinada usando Activity.shouldShowRequestPermissionRationale (String), por exemplo:
if (shouldShowRequestPermissionRationale(Manifest.permission.WRITE_CONTACTS)) {...
É o que diz a documentação do Android ( https://developer.android.com/training/permissions/requesting.html ):
Para ajudar a encontrar as situações em que você precisa fornecer explicações adicionais, o sistema fornece o método Activity.shouldShowRequestPermissionRationale (String). Este método retorna true se o aplicativo solicitou essa permissão anteriormente e o usuário negou a solicitação. Isso indica que você provavelmente deve explicar ao usuário por que precisa da permissão.
Se o usuário recusou a solicitação de permissão no passado e escolheu a opção Não perguntar novamente na caixa de diálogo do sistema de solicitação de permissão, esse método retornará false. O método também retornará false se a política do dispositivo proibir que o aplicativo tenha essa permissão.
Para saber se o usuário negou "nunca perguntar novamente", verifique novamente o método shouldShowRequestPermissionRationale no seu onRequestPermissionsResult quando o usuário não concedeu a permissão.
@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...*/ ) {
}
}
}
}
}
Você pode abrir a configuração do seu aplicativo com este código:
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivityForResult(intent, REQUEST_PERMISSION_SETTING);
Não há como enviar o usuário diretamente para a página Autorização.