¿Cómo puedo abrir mediante programación la pantalla de permisos para una aplicación específica en Android 6.0 (Marshmallow)?
Tengo una pregunta sobre la nueva versión de Android 6.0 (Marshmallow).
¿Es posible mostrar la pantalla "Permisos de aplicaciones" para una aplicación específica mediante una intención o algo similar?
Es posible mostrar la pantalla "Información de la aplicación" de la aplicación en Configuración con el siguiente código:
startActivity(
new Intent(
android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
Uri.fromParts("package", getPackageName(), null)
)
);
¿Existe una solución análoga para abrir directamente la pantalla "Permisos de la aplicación" de la aplicación?
Ya investigué un poco sobre esto pero no pude encontrar una solución.
De acuerdo con el video oficial de permisos de Marshmallow (en la marca de 4m 43s ), debes abrir la página de Configuración de la aplicación (desde allí, hay un clic para llegar a la página de Permisos).
Para abrir la página de configuración, harías
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivity(intent);
Esto no es posible. Yo también intenté hacerlo. Pude averiguar el nombre del paquete y la actividad que se iniciará. Pero al final obtendrá una excepción de seguridad debido a que falta un permiso que no puede declarar.
Con respecto a la otra respuesta, también recomiendo abrir la pantalla de configuración de la aplicación. Hago esto con el siguiente código:
public static void startInstalledAppDetailsActivity(final Activity context) {
if (context == null) {
return;
}
final Intent i = new Intent();
i.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
i.addCategory(Intent.CATEGORY_DEFAULT);
i.setData(Uri.parse("package:" + context.getPackageName()));
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
i.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
context.startActivity(i);
}
Como no quiero tener esto en mi pila de historial, lo elimino usando indicadores de intención.
Versión de Kotlin:
val intent = Intent(ACTION_APPLICATION_DETAILS_SETTINGS)
with(intent) {
data = Uri.fromParts("package", requireContext().packageName, null)
addCategory(CATEGORY_DEFAULT)
addFlags(FLAG_ACTIVITY_NEW_TASK)
addFlags(FLAG_ACTIVITY_NO_HISTORY)
addFlags(FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS)
}
startActivity(intent)