Saltar al contenido

SYSTEM_ALERT_WINDOW: cómo obtener este permiso automáticamente en Android 6.0 y targetSdkVersion 23

Solución:

Es un nuevo comportamiento introducido en Marshmallow. 6.0.1.

Cada aplicación que solicita el SYSTEM_ALERT_WINDOW permiso y que se instala a través de Play Store (versión 6.0.5 o superior), habrá concedido el permiso automáticamente.

Si, en cambio, la aplicación se descarga, el permiso no se otorga automáticamente. Puede intentar descargar e instalar el APK de Evernote desde apkmirror.com. Como puede ver, debe otorgar manualmente el permiso en Settings -> Apps -> Draw over other apps.

Estas son las confirmaciones [1] [2] que permiten a Play Store otorgar la concesión automática de la SYSTEM_ALERT_WINDOW permiso.

Sí, después de Marshmallow, Android hace que el nivel de seguridad se adhiera más, pero para

SYSTEM_ALERT_WINDOW

puede mostrar la acción flotante y cualquier cosa.Puede obligar al usuario a dar permiso para ello Siguiendo los códigos en su onCreate() método 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 permisos “Dibujar sobre otras aplicaciones”.


Editar: Mi código anterior funciona 100% correcto

Pero acabo de descubrir que muchos chicos todavía están buscando cómo permitir ACTION_MANAGE_OVERLAY_PERMISSION Me gusta permanentemente Si el usuario ha permitido el permiso una vez, no lo pregunte cada vez que abra la aplicación así que escucha la solución para ti

  1. Compruebe si el dispositivo tiene API 23+

  2. si tiene 23+ API, compruebe si el usuario tiene permiso o no

  3. si tuviera permiso una vez, no lo lleves a Settings.ACTION_MANAGE_OVERLAY_PERMISSION y si aún no tiene el permiso, solicite la verificación del permiso de tiempo de ejecución

Ponga debajo de la línea en su onCreate() método. Pon esto después 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 olvides declarar esta variable pública en tu clase.

public static int ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE = 5469;

Ahora(2019) que Google ofrece una API alternativa a SYSTEM_ALERT_WINDOW en forma de Burbujas en Android Q, Google ha decidido eventualmente desaprobar SYSTEM_ALERT_WINDOW en una futura versión de Android.

Y dispositivos Android Go ya no concederá este permiso
es decir Settings.canDrawOverlays() == false

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *