Los permisos de superposición de Android Marshmallow

En este artículo te explicamos algunas de las complejidades alrededor de los permisos de superposición del sistema introducidas en Android Marshmallow. Android ha permitido que las aplicaciones puedan ejecutarse sobre todas las demás aplicaciones que utilizan el permiso SYSTEM_ALERT_WINDOW. Esto fue permitido, siempre y cuando el permiso fuese declarado en el manifest.

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
...
    </application>
...
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

</manifest>

Esta técnica fue utilizada para que aquellas aplicaciones que requieren ejecutarse sobre otras aplicaciones. Un buen ejemplo son los chats de Messenger, la aplicación para mensajería instantánea de Facebook, que flotan sobre otras aplicaciones.

¿Qué ha pasado en Marshmallow?

En Android Marshmallow, el permiso SYSTEM_ALERT_WINDOW se ha clasificado como un permiso "peligroso". Esto es comprensible, ya que a priori podemos imaginar una aplicación transparente interceptando tus touches o tus inputs. Así, en lugar de permitir que las aplicaciones usen la superposición sólo en la declaración del manifest, en Android Marshmallow, el usuario debe proporcionar un permiso específico en la configuración de Android a la aplicación para que se ejecute sobre otras aplicaciones.

Esta configuración se puede encontrar en Ajustes > Aplicaciones > Avanzado (icono de ajustes) -> Ejecutar sobre otras aplicaciones

 

Como ya sabes, Android Marshmallow introdujo nuevos permisos por los que la aplicación preguntará al usuario y este, a su antojo, puede modificar. Pero, ya que este se clasifica como un permiso peligroso, las aplicaciones pueden no solicitar este permiso al usuario específicamente, ya que se considera de riesgo.

¿Qué hay que hacer para solucionar esto?

Una posible solución es dirigir al usuario a la pantalla anterior, si el usuario está ejecutando Android Marshmallow o superior. Afortunadamente, Android proporciona un intent ya creado que se puede utilizar para iniciar la actividad anterior.

 

// 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);
}

Eso es todo. La acción ACTION_MANAGE_OVERLAY_PERMISSION directmente lanza la pantalla de "Ejecutar sobre otras aplicaciones".

Y este ha sido el tutorial sobre cómo iterar una lista en Python, esperamos que te haya gustado y sepas aplicarlo en tus futuros proyectos. Ya sabes que si nos quieres proponer un tema que quieres ver reflejado como un tutorial o como una práctica, solo tienes que hacer uso del área de comentarios de un poco más abajo. Por el contrario, si quieres enviarnos tus propios tutoriales, puedes hacerlo a través de la intranet de usuarios que está habilitada para ello, a través del menú Enviar Tutorial. Ya sabes, ayúdanos a crecer con tus conocimientos. ¡Un saludo y feliz código!

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP