¿Cómo puedo abrir mediante programación la pantalla de permisos para una aplicación específica en Android 6.0 (Marshmallow)?

Resuelto Frederik Schweiger asked hace 54 años • 0 respuestas

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?

Pantalla de permisos de Android M

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.

Frederik Schweiger avatar Jan 01 '70 08:01 Frederik Schweiger
Aceptado

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);
Martin Konecny avatar Oct 07 '2015 03:10 Martin Konecny

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)
Thomas R. avatar Sep 28 '2015 11:09 Thomas R.