Yeh 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 onCreate()
cosa.Puede Forzar al usuario a que le dé permiso Siguiendo los códigos en su método. Coloque este código después de setContentView
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Intent myIntent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
startActivity(myIntent);
}
La acción ACTION_MANAGE_OVERLAY_PERMISSION
lanza 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 pueden permitir ACTION_MANAGE_OVERLAY_PERMISSION
permanentemente Me gusta Si el usuario ha permitido Permiso una vez, entonces no lo pregunte cada vez que abra la aplicación, así que escuche la solución para usted-
Compruebe si el dispositivo tiene API 23+
si tiene 23+ API, compruebe si el usuario tiene permiso o no
si tuvo permiso una vez, no lo lleve Settings.ACTION_MANAGE_OVERLAY_PERMISSION
y si aún no lo tiene, solicite la verificación de permiso de tiempo de ejecución
Ponga debajo de la línea en su onCreate()
método. Pon esto despuéssetContentView
checkPermission();
Ahora ponga el código debajo 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)) {
checkPermission();
} else {
}
}
}
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;