SYSTEM_ALERT_WINDOW – Cómo obtener este permiso automáticamente en Android 6.0 y targetSdkVersion 23
Facebook, Evernote, Pocket – todas las aplicaciones obtienen este permiso en Android 6.0 automáticamente, aunque apuntan a 23 ( targetSdkVersion=23
).
Ha habido mucha documentación con respecto al nuevo modelo de permiso de Marshmallow. Uno de ellos es SYSTEM_ALERT_WINDOW
sido 'promovido' a clase de permiso 'above dangerous', requiriendo así una intervención especial del usuario para que las aplicaciones se concedan con ellas. Si la aplicación tiene targetSdkVersion
22 o inferior, app obtiene este permiso automáticamente (si se solicita en el manifiesto).
- Android "Permiso de negación: no se puede utilizar la cámara"
- ¿Por qué mi BroadcastReceive causa una denegación READ_PRIVILEGED_PHONE_STATE en M?
- Descartar diálogo de solicitud de permiso en Marshmallow utilizando el botón Atrás
- Forzar la aplicación a reiniciar desde la primera Actividad (cuando se deniega un permiso)
- Servicios de Android Play FusedLocatioAPI getLastLocation se bloquea con SecurityException
Sin embargo, he notado algunas aplicaciones que reciben este permiso, sin necesidad de enviar al usuario a la página especial de configuración de Draw over other apps
permiso de Draw over other apps
. Vi Facebook, Evernote, Pocket – y tal vez hay más.
Alguien sabe cómo se puede otorgar este permiso a una aplicación sin que el usuario pase por Settings -> Apps -> Draw over other apps
?
Gracias
- ¿Qué permiso debe requerir mi receptor SMS de manejo de entrada del sistema?
- La aplicación de Android no solicita permisos al instalar
- Android, encuentra todos los lugares en código para solicitar permisos
- Excepción grave: java.lang.SecurityException: Falta permiso para insertar credenciales
- La aplicación de Android se bloquea en 6.0 mientras busca permisos con ActivityCompat.requestPermissions
- ¿Permiso de notificaciones push (GCM) en tiempo de ejecución?
- Excepción de seguridad al intentar acceder a una imagen de Picasa en un dispositivo que ejecuta 4.2
- Cómo deshabilitar las animaciones en el código al ejecutar pruebas de Espresso
Es un nuevo comportamiento introducido en Marshmallow 6.0.1 .
Todas las aplicaciones que soliciten el permiso SYSTEM_ALERT_WINDOW
y que se instalen a través de Play Store (se requiere versión 6.0.5 o posterior), habrán concedido el permiso automáticamente.
Si en cambio la aplicación se carga de forma indirecta, el permiso no se concede automáticamente. Puede intentar descargar e instalar el Evernote APK de apkmirror.com . Como puede ver, debe conceder manualmente el permiso en Settings -> Apps -> Draw over other apps
.
Estos son los commits [1] [2] que permiten a Play Store dar la concesión automática del permiso SYSTEM_ALERT_WINDOW
.
Yeh Después de Marshmallow vienen Android hacer más nivel de seguridad, pero para
SYSTEM_ALERT_WINDOW
Usted puede mostrar la acción flotante y cualquier cosa Usted puede Forzar al usuario a dar permiso para ello Siguiendo códigos en su método de Oncreate () Ponga este código después de setContentView
/ // Check if Android M or higher if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){ // Show alert dialog to the user saying a separate permission is needed // Launch the settings activity if the user prefers Intent myIntent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION); startActivity(myIntent); }
La acción ACTION_MANAGE_OVERLAY_PERMISSION inicia directamente la pantalla de permiso "Dibujar sobre otras aplicaciones".
Editar
Hello My Above Code trabajo 100% Correcto
Pero acabo de encontrar que muchos chicos siguen buscando que como puede permitir ACTION_MANAGE_OVERLAY_PERMISSION
permanentemente como Si el usuario tiene permiso Permiso Una vez, entonces no lo pida cada vez que abra la aplicación para escuchar la solución para usted- 1) Comprobar es dispositivo tiene api 23 +
2) si 23 + api luego comprueba si el usuario tiene permiso o no
3) si había permitido una vez no lo lleve a Settings.ACTION_MANAGE_OVERLAY_PERMISSION y si no lo ha permitido todavía pide permiso de ejecución permiso
Put below line in in your Oncreate() method Put this after setContentView checkPermission();
Ahora ponga el código debajo en onActivityResult
@TargetApi(Build.VERSION_CODES.M) @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE) { if (!Settings.canDrawOverlays(this)) { // You don't have permission checkPermission(); } else { //do as per your logic } } }
Ahora finalmente el código del método checkPermission
public void checkPermission() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (!Settings.canDrawOverlays(this)) { Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName())); startActivityForResult(intent, ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE); } } }
Y no olvide declarar esta variable pública en su clase
public static int ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE= 5469;
Aplausos D
Si la aplicación apunta a la API 22 o inferior, Play Store dará el permiso SYSTEM_ALERT_WINDOW y otros cuando el usuario haga clic para instalar (mostrando una alerta) incluso si su dispositivo es Android 6.0 De lo contrario, si la aplicación apunta a la API 23 o superior, El permiso será la solicitud para conceder en tiempo de ejecución.