23 votos

¿Determinar qué aplicación está dibujando encima de otras aplicaciones?

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

Por ejemplo, la aplicación Facebook Messenger puede dibujar las burbujas de chat encima de todo, pero ¿cómo puedo saber 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 sólo para desinstalarla, sino para advertir a todos los que usan esta aplicación. (No he instalado ninguna aplicación recientemente y ya he verificado las actualizaciones recientes).

Intenté usar el Volcado de la jerarquía de vistas para UI Automator de Android Studio, pero parece que las aplicaciones que se dibujan en la parte superior no se pueden seleccionar de esta manera.

(Haga clic en la imagen para ampliarla)

Android Studio Screen

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/

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 un salvavidas cuando estaba tratando de encontrar una aplicación de adware que parecía ser capaz de dibujar sobre todo ... sin tener el permiso de "dibujar otras aplicaciones".

4voto

Andrew T. Puntos 2107

Si usas Android 6.0 Marshmallow, puedes usar su gestor de permisos nativo.

Desde un artículo en BGR ,

Android 6.0 Marshmallow tiene un montón de novedades muy esperadas y una de ellas es algo que los usuarios de iPhone han tenido durante años: Permisos granulares para aplicaciones. Phone Arena ha instalado la última versión preliminar de Marshmallow para desarrolladores y ha publicado algunos consejos excelentes para ayudar a los usuarios de Android a asegurarse de que solo comparten datos con las aplicaciones que quieren compartir específicamente.

Para acceder a la función de gestión de permisos de Marshmallow, deberás abrir el menú de Ajustes y luego hacer clic en la sección de Aplicaciones. Desde allí, haz clic en el icono del engranaje que te dará la opción de ir al gestor de permisos de las aplicaciones.

Para ver la lista de aplicaciones que pueden dibujar sobre otras aplicaciones, vaya a Ajustes - Aplicaciones - Avanzadas (menú con icono de engranaje) - Dibujar sobre otras aplicaciones .

También puedes activar/desactivar la función temporalmente tocando la aplicación y activando la opción "Permitir dibujar sobre otras aplicaciones".

Android M permission manager

Imagen por cortesía de Sebastiano Gottardo en Medium

1 votos

En mi caso, faltaba el Avanzado (menú con icono de engranaje), pero en su lugar está en la parte superior/derecha el icono de punto, luego ; configuraciones de aplicaciones.

3voto

mitchbw Puntos 11

¡Muchas gracias @Firelord ! Por fin he encontrado la aplicación que me ha estado impidiendo instalar apk's y realizar copias de seguridad adb.

Para mí fue 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

Mucha gente ha tenido problemas con la instalación de apk's y no poder presionar "Instalar". Todas las respuestas que pude encontrar fueron principalmente hasta la atenuación de la pantalla, el tintado, aplicaciones de ahorro de energía. Como yo no usaba ninguna o había eliminado todas las aplicaciones similares, me costó mucho encontrar qué pasaba y qué aplicación era la culpable. ¡Y por fin! Después de un simple comando y una rápida búsqueda, se ha resuelto :D

La aplicación ofensiva Battery Mix es una sencilla aplicación de monitorización de la batería que tenía la función de mostrar una fina línea en la parte superior de la pantalla para mostrar el estado del nivel de la batería (una pequeña gran 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 el botón Instalar.

Ejecutar el comando desde el PC

adb shell dumpsys window windows > dumpsys-windows.txt

Buscar

SYSTEM_ALERT_WINDOW Para encontrar cualquier aplicación infractora he buscado la cadena anterior

Lo que me dio la línea:

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

(Véase la carga de imágenes para la sección del archivo de texto) enter image description here

inmediatamente pude reconocer a qué aplicación se refería: jp.smapho. mezcla_de_baterías

Así que ahora sé que debo matar esa aplicación cada vez que planee hacer una carga lateral o antes de las copias de seguridad adb ;D

0 votos

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

-1voto

Aaron Toponce Puntos 216

Para Android Marshmallow, y Oxygen 3.0.2 , Desactivación de la ventana emergente de diseño de pantalla

Vaya a Aplicaciones y configure Aplicaciones y seleccione Dibujo sobre otras aplicaciones.

Vaya y seleccione la aplicación para desactivarla, de modo que la aplicación se desbloquee de la persmisión del diseño de la pantalla. y la aplicación pueda obtener directamente los permisos

Vaya a la aplicación respectiva y a Permisos y habilite los permisos que desee.

Disfrute de

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. Guarda tu esfuerzo para las preguntas que aún no han sido contestadas :-)

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