Una forma sencilla sería averiguar todas las aplicaciones que tienen el permiso "dibujar sobre otras aplicaciones" y luego seleccionarlas de las que están activas en la pantalla. A continuación, forzar la detención de esas aplicaciones comunes hasta localizar la aplicación responsable de la superposición activa.
Nota:
-
adb debería estar ya configurado en el PC.
- En el caso de Android anterior a la versión 4.4.x, es posible que se requiera acceso Root.
- Saltar al título " Aplicaciones para aplicaciones " si no estás familiarizado o no te sientes cómodo con la línea de comandos y/o la línea de comandos no resuelve tu problema.
Enumerar las aplicaciones que tienen permiso para la superposición
El permiso que necesita 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 tengan dicho permiso. Depende de usted encontrar un método para esto. Mi respuesta aquí puede ayudarte.
Nota que necesitamos las aplicaciones nombres de paquetes y no sus etiquetas.
Selección de ventanas activas
Ejecutar el comando
adb shell dumpsys window windows
Esto le daría detalles sobre lo que está causando que se muestre algo en la pantalla, incluyendo el nombre del componente de una aplicación que lo está causando.
La forma de extraer el nombre depende de ti. Sin embargo, puede probar este comando
adb shell 'dumpsys window windows | grep "Window #"'
Si recibe el error: 'grep' no es reconocido como un comando interno o externo En Windows, pruebe este comando alternativo:
adb shell "dumpsys window windows | grep 'Window #'"
Salida de demostración
Window #4 Window{42065d50 u0 com.android.phone/com.mediatek.phone.UssdAlertActivity}:
Window #5 Window{42197468 u0 ginlemon.flowerpro/ginlemon.flower.HomeScreen}:
Window #6 Window{420fdb58 u0 com.android.systemui.ImageWallpaper}:
Window #7 Window{421e3b88 u0 com.android.contacts/com.android.contacts.activities.DialtactsActivity}:
En la salida anterior, todo lo que suceda a u0
y precedente /
es el nombre del paquete de una aplicación. Una aplicación puede tener varios componentes que muestren algo en la pantalla.
Tienes que crear una lista de esos nombres de paquetes. Si usted tener BusyBox instalado , puedes hacer
adb shell 'dumpsys window windows | grep "Window #" | sed -e "s/.*u0 //g" -e "s/\/.*//g" -e "s/}://g"'
En cualquier caso, 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.
Compara estas dos listas y señala las aplicaciones que son comunes en ambas. Esta tercera lista estaría formada por las aplicaciones que tienen permiso para dibujar superposiciones y que actualmente están dibujando una superposición activa en la pantalla.
Tiempo de matar
Acaba con cada una de las aplicaciones de la tercera lista una por una y observa el estado de la superposición. Puedes utilizar 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. Puedes considerar negar a la aplicación el permiso para dibujar sobre otras aplicaciones. Utiliza este comando:
adb shell 'appops set PACKAGE SYSTEM_ALERT_WINDOW deny' # replace PACKAGE with package name of the app
Para revertir los cambios, sustituya denegar con permitir en dicho comando y ejecutarlo.
Si estás ejecutando Android Marshmallow, esta respuesta de Andrew T. se puede utilizar.
Nota: El mencionado comando ha sido probado con éxito en Android 5.1.1 y 6.0.1 (builds CM). También es posible que el comando funcione en Android 5.0.x pero No puedo garantizar . Ejecución de ese comando en la versión de Android lanzado antes de Lollipop causaría el fracaso.
Dado que a menudo la superposición es perceptible, desaparecería instantáneamente en el momento en que la aplicación que la causa es eliminada, por lo tanto, usted sabría qué aplicación estaba causando esa superposición.
Aplicaciones para aplicaciones
Sugerido originalmente por Izzy, puedes utilizar una aplicación que tenga la funcionalidad de listar los permisos concedidos a las aplicaciones instaladas, para señalar las aplicaciones que tienen el permiso "dibujar sobre otras aplicaciones". Puedes buscar una aplicación de este tipo por tu cuenta o utilizar la lista Comprobación de permisos mantenido por Izzy en su página web.
También necesitarías un gestor de procesos/app para forzar la parada/eliminación de algunos procesos. Yo recomiendo Monitor del SO pero eres libre de usar cualquier aplicación competente. Ver aplicaciones relacionadas en Información del sistema .
Sólo para fines de demostración
He intentado Gestor avanzado de permisos para listar las aplicaciones con permiso para "dibujar sobre otras aplicaciones". Después, cambié a OS Monitor para ver las aplicaciones que se ejecutaban en primer y segundo plano. Comparé la salida de ambas aplicaciones y forcé individualmente la detención de las aplicaciones comunes en ambas. Puedes matar un proceso desde el monitor del sistema operativo, así que no es necesario cambiar a la configuración de la aplicación.
(Haga clic en la imagen para ampliarla)
0 votos
Sólo para añadir a los problemas señalados en las respuestas a continuación (para tratar de mantenerlo completo). En TouchWiz (Samsung Galaxy, la mía es la Nota 4) girando panel de teclas laterales fuera resuelto este problema para mí.
0 votos
Para los que no son desarrolladores, basta con consultar aquí la lista de aplicaciones: Android.stackexchange.com/questions/154274/