superposición superposicion studio quita puedo permisos permiso para pantalla multiples este desactiva dar cómo configuracion como cambiar aplicaciones ajustes activar android android-permissions android-6.0-marshmallow

superposicion - ¿Cómo abrir mediante programación la pantalla de permisos para una aplicación específica en Android Marshmallow?



superposición de pantalla j7 (11)

Tengo una pregunta sobre la nueva versión de Android Marshmallow:

¿Es posible mostrar la pantalla de permisos para una aplicación específica a través de un intento o algo similar?

Es posible mostrar la configuración de la aplicación con el siguiente código: ¿existe una solución analógica para abrir directamente la pantalla de permisos?

startActivity(new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.fromParts("package", getPackageName(), null)));

Ya investigué un poco sobre esto, pero no pude encontrar una solución adecuada, ¡agradecería toda ayuda!


De acuerdo con el video oficial de permisos de Marshmallow (en la marca de 4m 43s ), debe abrir la página de Configuración de la aplicación (desde allí, hay un clic en la página de Permisos).

Para abrir la página de configuración, haría

Intent intent = new Intent(); intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); Uri uri = Uri.fromParts("package", getPackageName(), null); intent.setData(uri); startActivity(intent);


En cambio, puede abrir la configuración general de una aplicación en particular con una línea

startActivity(new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" + BuildConfig.APPLICATION_ID)));


No es posible abrir pragmáticamente la pantalla de permisos. En cambio, podemos abrir la pantalla de configuración de la aplicación.

Código

Intent i = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" + BuildConfig.APPLICATION_ID)); startActivity(i);

Salida de muestra


Puede ser que esto te ayude

private void openSettings() { Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); Uri uri = Uri.fromParts("package", getPackageName(), null); intent.setData(uri); startActivityForResult(intent, 101); }


Si desea escribir menos código en Kotlin , puede hacer esto:

fun Context.openAppSystemSettings() { startActivity(Intent().apply { action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS data = Uri.fromParts("package", packageName, null) }) }

Basado en la respuesta de Martin Konecny


Si hablamos de FLYME OS (Meizu) SOLAMENTE, hay su propia aplicación de seguridad con permisos.

Para abrirlo use la siguiente intención:

public static void openFlymeSecurityApp(Activity context) { Intent intent = new Intent("com.meizu.safe.security.SHOW_APPSEC"); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.putExtra("packageName", BuildConfig.APPLICATION_ID); try { context.startActivity(intent); } catch (Exception e) { e.printStackTrace(); } }

BuildConfig es la BuildConfig de su aplicación.


Es posible con el método requestPermissions

Aunque no puede ver directamente la página de configuración, puede cambiar los permisos de acceso.
Un buen ejemplo:
https://www.learn2crack.com/2015/10/android-marshmallow-permissions.html

De esta manera puede verificar y llamar

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { requestPermissions(new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE}, 0); }


Xamarin Forms Android:

//--------------------------------------------------------- public void OpenSettings() //--------------------------------------------------------- { var intent = new Intent(Android.Provider.Settings.ActionApplicationDetailsSettings, Android.Net.Uri.Parse("package:" + Forms.Context.PackageName)); Forms.Context.StartActivity(intent); }


no es posible obtener el permiso pragmáticamente ... pero le sugiero que ponga esa línea de código en el intento {} catch {} que desafortunadamente hace que su aplicación se detenga ... y en el cuerpo del catch haga un cuadro de diálogo que navegará usuario a un pequeño tutorial para habilitar el sorteo sobre el permiso de otras aplicaciones ... luego en el botón sí, haga clic en poner este código ...

Intent callSettingIntent= new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION); startActivity(callSettingIntent);

esta intención es abrir directamente la lista de sorteo sobre otras aplicaciones para administrar los permisos y luego, desde aquí, es un clic para dibujar sobre otras aplicaciones Permisos ... Sé que esta no es la respuesta que está buscando ... pero Estoy haciendo esto en mis aplicaciones ...


Esto no es posible. Traté de hacerlo también. Podría averiguar el nombre del paquete y la actividad que se iniciará. Pero al final obtendrá una excepción de seguridad debido a la falta de un permiso que no puede declarar.

ACTUALIZAR:

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.


Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Uri uri = Uri.fromParts("package", getPackageName(), null); intent.setData(uri); startActivity(intent);

Descripción

Settings.ACTION_APPLICATION_DETAILS_SETTINGS
Abre la página de configuración Detalles para la aplicación. Desde aquí, el usuario debe asignar manualmente el permiso deseado.

Intent.FLAG_ACTIVITY_NEW_TASK
Opcional Si se establece, se abre la Pantalla de configuración (Actividad) como nueva actividad. De lo contrario, se abrirá en la actividad actualmente en ejecución.

Uri.fromParts("package", getPackageName(), null)
Prepara o crea URI, mientras que getPackageName (): devuelve el nombre de su paquete de aplicación.

intent.setData(uri)
No te olvides de configurar esto . De lo contrario, obtendrá android.content.ActivityNotFoundException . Debido a que ha establecido su intención como Settings.ACTION_APPLICATION_DETAILS_SETTINGS y Android espera algún nombre para buscar.