Developer Preview 2 trae algunos cambios en la forma en que la aplicación solicita los permisos (consulte también http://developer.android.com/preview/support.html#preview2-notes ).
El primer diálogo ahora se ve así:
No hay una casilla de verificación "Nunca volver a mostrar" (a diferencia de la vista previa del desarrollador 1). Si el usuario niega el permiso y si el permiso es esencial para la aplicación, podría presentar otro cuadro de diálogo para explicar la razón por la cual la aplicación solicita ese permiso, por ejemplo:
Si el usuario rechaza nuevamente, la aplicación debería cerrarse si necesita absolutamente ese permiso o seguir ejecutándose con una funcionalidad limitada. Si el usuario reconsidera (y selecciona volver a intentarlo), se solicita nuevamente el permiso. Esta vez el aviso se ve así:
La segunda vez se muestra la casilla de verificación "Nunca preguntar de nuevo". Si el usuario niega nuevamente y la casilla de verificación está marcada, no debería suceder nada más. Se puede determinar si la casilla de verificación está marcada o no mediante Activity.shouldShowRequestPermissionRationale (String), por ejemplo, así:
if (shouldShowRequestPermissionRationale(Manifest.permission.WRITE_CONTACTS)) {...
Eso es lo que dice la documentación de Android ( https://developer.android.com/training/permissions/requesting.html ):
Para ayudar a encontrar las situaciones en las que necesita proporcionar una explicación adicional, el sistema proporciona el método Activity.shouldShowRequestPermissionRationale (String). Este método devuelve verdadero si la aplicación ha solicitado este permiso anteriormente y el usuario rechazó la solicitud. Eso indica que probablemente debería explicarle al usuario por qué necesita el permiso.
Si el usuario rechazó la solicitud de permiso en el pasado y eligió la opción No volver a preguntar en el cuadro de diálogo del sistema de solicitud de permiso, este método devuelve falso. El método también devuelve falso si la política del dispositivo prohíbe que la aplicación tenga ese permiso.
Para saber si el usuario negó con "nunca preguntar de nuevo", puede verificar nuevamente el método shouldShowRequestPermissionRationale en su onRequestPermissionsResult cuando el usuario no otorgó el permiso.
@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...*/ ) {
}
}
}
}
}
Puede abrir la configuración de su aplicación con 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);
No hay forma de enviar al usuario directamente a la página de Autorización.