23 votos

Determina qué aplicación está dibujando sobre otras aplicaciones.

¿Hay alguna forma de determinar qué aplicación está dibujando encima de otras aplicaciones?

Por ejemplo, la aplicación de Facebook Messenger puede dibujar los globos de chat encima de todo, ¿pero cómo sé qué aplicación está haciendo esto?

Mi problema:

Tengo una aplicación que está dibujando anuncios encima de todo y quiero saber qué aplicación está haciendo esto. No solo para desinstalarla, sino para advertir a todos los que usan esta aplicación. (No instalé ninguna aplicación recientemente y ya verifiqué las actualizaciones recientes.)

Intenté usar la Dump View Hierarchy for UI Automator desde Android Studio, pero parece que las aplicaciones que dibujan encima no se pueden seleccionar de esta forma.

(Haga clic en la imagen para ampliar)

Pantalla de Android Studio

0 votos

Sólo para agregar a los problemas señalados en las respuestas anteriores (para intentar mantenerlo completo). En TouchWiz (Samsung Galaxy, el mío es el Note 4) apagar el panel de tecla lateral resolvió este problema para mí.

0 votos

Para los no desarrolladores, simplemente haz clic aquí para ver una lista de aplicaciones: android.stackexchange.com/questions/154274/…

29voto

Firelord Puntos 161

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)

IMG: IMG: IMG:

1 votos

Gracias, la lista de ventanas fue de gran ayuda cuando intentaba encontrar una aplicación de adware que parecía ser capaz de dibujar sobre todo... sin tener el permiso de "dibujar sobre otras aplicaciones".

4voto

Andrew T. Puntos 2107

Si estás utilizando Android 6.0 Marshmallow, puedes usar su administrador de permisos nativo.

De un artículo en BGR,

Android 6.0 Marshmallow tiene muchas nuevas funciones altamente anticipadas y una de ellas es algo que los usuarios de iPhone han tenido durante años: Permisos de aplicaciones granulares. Phone Arena instaló la última versión de prueba de Marshmallow y publicó algunos consejos excelentes para ayudar a los usuarios de Android a asegurarse de que solo comparten datos con aplicaciones que específicamente desean compartir.

Para acceder a la función de gestión de permisos de Marshmallow, debes abrir el menú de Configuración y luego hacer clic en la sección de Aplicaciones. Desde allí, haz clic en el icono de Configuración que te dará la opción de ir al administrador de permisos de la aplicación.

Para ver la lista de aplicaciones que pueden dibujar sobre otras aplicaciones, ve a Configuración - Aplicaciones - Avanzado (menú con icono de configuración) - Dibujar sobre otras aplicaciones.

También puedes habilitar/deshabilitar la función temporalmente tocando la aplicación y alternando el "Permitir dibujar sobre otras aplicaciones".

Administrador de permisos de Android M

Imagen cortesía de Sebastiano Gottardo en Medium

1 votos

Para mí, el menú Avanzado (menú con ícono de engranaje) estaba ausente, pero en su lugar se encuentra en el ícono de punto punto punto en la parte superior/derecha, luego; configuraciones de la aplicación.

3voto

mitchbw Puntos 11

¡Muchas gracias @Firelord ! Finalmente encontré la aplicación que me estaba impidiendo instalar apk's y realizar copias de seguridad de adb.

Para mí, encontré que era una aplicación llamada Battery Mix. Sigue leyendo para ver qué hice y cómo lo hice.

https://play.google.com/store/apps/details?id=jp.smapho.battery_mix

Muchas personas han tenido problemas al instalar apk's y no poder presionar 'Instalar'. Todas las respuestas que pude encontrar se debían principalmente al atenuado de la pantalla, aplicaciones de ahorro de energía. Como no usaba ninguna de esas aplicaciones o las había eliminado, había estado batallando para encontrar qué estaba sucediendo y cuál aplicación era la culpable. ¡Y finalmente! Después de un simple comando y una rápida búsqueda, se resolvió :D

La aplicación problemática Battery Mix es una aplicación simple de monitoreo de batería que tenía una función que utilizaba para mostrar una línea delgada en la parte superior de la pantalla para mostrar el estado del nivel de la batería (una pequeña pero genial aplicación).

Así que para diagnosticar, utilicé un comando de Firelord (arriba) para volcar un archivo de texto y luego buscar la aplicación que estaba causando que el sistema Android me impidiera hacer clic en ese botón de Instalar.

Ejecutar comando desde PC

adb shell dumpsys window windows > dumpsys-windows.txt

Buscar

SYSTEM_ALERT_WINDOW

Para encontrar cualquier aplicación problemática, busqué la cadena anterior

Lo cual me dio la línea:

mOwnerUid=10129 mShowToOwnerOnly=true package=jp.smapho.battery_mix appop=SYSTEM_ALERT_WINDOW

(Ver imagen adjunta para la sección del archivo de texto) enter image description here

Inmediatamente pude reconocer a qué aplicación se refería: jp.smapho.battery_mix

Así que ahora sé que debo cerrar esa aplicación cada vez que planee cargar lateralmente o antes de hacer copias de seguridad de adb.

0 votos

¿Y qué pasa si la ventana de alerta es mostrada por com.android.systemui? :) Mi Oukitel Y4800 (Android 9) se niega a habilitar los servicios de accesibilidad debido a esta ventana de obscurecimiento

-1voto

Aaron Toponce Puntos 216

Para Android Marshmallow y Oxygen 3.0.2, Deshabilitar la ventana emergente de Diseño de pantalla

Ve a Aplicaciones y configura Aplicaciones y selecciona Dibujar sobre otras aplicaciones.

Ve y selecciona la aplicación para desactivarla de modo que la aplicación esté desbloqueada de los permisos de diseño de pantalla y la aplicación pueda obtener directamente los permisos.

Ve a la aplicación respectiva y habilita los permisos que desees.

Disfruta

Raj

2 votos

Toda esta información ya está en la respuesta de Andrew T. No necesitas publicar una nueva respuesta para repetir las mismas instrucciones. ¡Ahorra tu esfuerzo para preguntas que aún no han sido respondidas :-)

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X