Nota:
- adb ya debería estar configurado en la PC.
- Para Android anterior a la versión 4.4.x, es posible que se requiera acceso de root.
- Algunos comandos no funcionarían en Android antes de la versión 5.1.
- Vaya al encabezado " Aplicaciones para aplicaciones " si no está familiarizado o no se siente cómodo con la línea de comandos y / o la línea de comandos no resuelve su problema.
Editar: corte la persecución en la solución anterior y siga solo esta sección editada.
Configura adb y ejecuta este comando:
adb shell "dumpsys window windows | toybox grep -i system_alert_window"
Obtendrá la salida de todas las superposiciones activas en la pantalla. Ejemplo de una salida con DU Screen Recorder, Tasker y AZ Screen Recorder mostrando superposiciones activas en pantalla:
bash-4.3 # adb shell "ventanas de la ventana dumpsys | toybox grep -i system_alert_window"
mOwnerUid = 10087 mShowToOwnerOnly = paquete verdadero = net.dinglisch.android.tasker appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10604 mShowToOwnerOnly = paquete verdadero = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10604 mShowToOwnerOnly = paquete verdadero = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10649 mShowToOwnerOnly = paquete verdadero = com.duapps.recorder appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10649 mShowToOwnerOnly = paquete verdadero = com.duapps.recorder appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10604 mShowToOwnerOnly = paquete verdadero = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10604 mShowToOwnerOnly = paquete verdadero = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10638 mShowToOwnerOnly = paquete verdadero = ninja.sesame.app.edge appop = SYSTEM_ALERT_WINDOW
El texto resaltado junto a package = y antes de appop es el nombre (s) del paquete de las aplicaciones que actualmente se superponen en la pantalla. En su caso, la salida que incluye los nombres del paquete sería diferente.
Anote los nombres del paquete (en adelante PKG) y ejecute este comando:
adb shell am force-stop PKG
Reemplace PKG con el nombre del paquete que anotó. Si tenía varios nombres de paquetes, repita el comando con un nombre de paquete a la vez.
El comando detendría forzosamente la aplicación y, por lo tanto, descartaría la superposición. Esto debería funcionar. Alternativamente, puede quitar el permiso de "Dibujar sobre otras aplicaciones" (superposición de pantalla en resumen) de las aplicaciones usando este comando:
adb shell appops set PKG SYSTEM_ALERT_WINDOW ignore
Nuevamente, reemplace PKG con el nombre del paquete según sea necesario. Además, es posible que deba repetir el comando force-stop para el PKG. Si decide revertir los cambios, reemplace ignorar con permitir en el comando mencionado anteriormente.
Alternativamente, puede usar App Ops para administrar los permisos de la GUI.
Para saber qué nombre de paquete corresponde a qué aplicación puede probar una aplicación de código abierto como Información de aplicaciones . Busque por nombre de paquete y obtendrá el nombre de la aplicación.
Editar terminado
Realmente no necesitas leer más ahora . Dejo intacta la solución anterior (es decir, la siguiente sección) porque 21 personas que la votaron encontraron útil y no quiero volver a equivocarme.
Una manera simple sería encontrar todas las aplicaciones que tienen el permiso "dibujar sobre otras aplicaciones" y luego seleccionarlas de las que están actualmente activas en la pantalla. Luego, realice la detención forzada de esas aplicaciones comunes hasta que identifique la aplicación responsable de la superposición activa.
Enumerar las aplicaciones que tienen permiso para superponer
El permiso requerido por una aplicación para crear una superposición es android.permission.SYSTEM_ALERT_WINDOW
(dibujar sobre otras aplicaciones).
Necesitamos encontrar todas las aplicaciones instaladas que tienen dicho permiso. Depende de usted encontrar un método para esto. Mi respuesta aquí puede ayudarte.
Tenga en cuenta que necesitamos los nombres de los paquetes de las aplicaciones y no sus etiquetas.
Recoger cerezas de ventanas activas
Ejecutar el comando
adb shell dumpsys window windows
Esto le daría detalles sobre cualquier causa que muestre algo en la pantalla, incluido el nombre del componente de una aplicación que lo causa.
La forma de extraer el nombre depende de usted. Sin embargo, puedes probar este comando
adb shell 'dumpsys window windows | grep "Window #"'
Si recibe el error: 'grep' no se reconoce como un comando interno o externo , en Windows pruebe este comando alternativo:
adb shell "dumpsys window windows | grep 'Window #'"
Salida de demostración
Ventana # 4 Ventana {42065d50 u0 com.android.phone/com.mediatek.phone.UssdAlertActivity}:
Ventana # 5 Ventana {42197468 u0 ginlemon.flowerpro / ginlemon.flower.HomeScreen}:
Ventana # 6 Ventana {420fdb58 u0 com.android.systemui.ImageWallpaper}:
Ventana # 7 Ventana {421e3b88 u0 com.android.contacts / com.android.contacts.activities.DialtactsActivity}:
En el resultado anterior, todo lo que sucede u0
y precede /
es el nombre del paquete de una aplicación. Una aplicación puede tener múltiples componentes que muestran algo en la pantalla.
Tienes que crear una lista de esos nombres de paquetes. Si tiene instalado BusyBox , puede hacer
adb shell 'dumpsys window windows | grep "Window #" | sed -e "s/.*u0 //g" -e "s/\/.*//g" -e "s/}://g"'
De todos modos, ahora tendrías dos listas:
- La primera lista contiene todas las aplicaciones que tienen el permiso
android.permission.SYSTEM_ALERT_WINDOW
.
- La segunda lista contiene todas las aplicaciones que muestran activamente algo en la pantalla.
Compare estas dos listas y aplicaciones individuales que son comunes en ambas listas. Esta tercera lista constituiría aplicaciones que tienen permiso para dibujar superposiciones y actualmente están dibujando una superposición activa en la pantalla.
Hora de matar
Elimine cada una de las aplicaciones de la tercera lista una por una y observe el estado de la superposición. Puede usar am force-stop PACKAGE_NAME --user 0
o cualquier otro método que le convenga. PACKAGE_NAME
es el nombre del paquete de la aplicación.
EDITAR : no es necesario matar una aplicación. Puede considerar negarle a la aplicación el permiso para dibujar sobre otras aplicaciones. Usa este comando:
adb shell 'appops set PACKAGE SYSTEM_ALERT_WINDOW deny' # replace PACKAGE with package name of the app
Para revertir los cambios, reemplace negar con permitir en dicho comando y ejecútelo.
Si está ejecutando Android Marshmallow, se puede usar esta respuesta de Andrew T.
Nota: El comando mencionado anteriormente se prueba con éxito en Android 5.1.1 y 6.0.1 (compilaciones CM). También es posible que el comando funcione en Android 5.0.x, pero no puedo garantizarlo . La ejecución de ese comando en la versión de Android lanzada antes de Lollipop causaría un error.
Dado que a menudo la superposición es perceptible, desaparecería instantáneamente en el momento en que la aplicación que la causa se elimine, por lo tanto, sabría qué aplicación estaba causando esa superposición.
Aplicaciones para aplicaciones
Originalmente sugerido por Izzy, puede usar una aplicación que tiene la funcionalidad de enumerar permisos otorgados a aplicaciones instaladas, para destacar las aplicaciones que tienen el permiso "dibujar sobre otras aplicaciones". Puede buscar dicha aplicación por su cuenta o utilizar la lista de verificadores de permisos mantenida por Izzy en su sitio web.
También necesitaría un administrador de procesos / aplicaciones para forzar-detener / eliminar algunos procesos. Recomiendo OS Monitor, pero tiene la libertad de usar cualquier aplicación competente. Ver aplicaciones relacionadas en Información del sistema .
Solo con fines de demostración
Intenté Advanced Permission Manager para enumerar aplicaciones con permiso para "dibujar sobre otras aplicaciones". Luego, cambié a OS Monitor para ver las aplicaciones ejecutándose en primer plano y en segundo plano. Emparejé el resultado de ambas aplicaciones e individualmente forcé la detención de las aplicaciones comunes en ambas. Puede eliminar un proceso desde el interior del monitor del sistema operativo, por lo que no es necesario cambiar a la configuración de la aplicación.
(Haga clic en la imagen para ampliarla)