2 votos

¿Cómo puedo emular la pulsación del azulejo de ajustes rápidos de otra aplicación?

Me gustaría pulsar de forma programada el azulejo de configuración rápida de otra aplicación, por ejemplo, desde el shell o Tasker.


En este caso concreto, me gustaría pulsar la baldosa de ProtonVPN para automatizar la conexión y desconexión.

Después de destrozar la aplicación, descubrí que podía desconectar la VPN de forma fiable con:

su root -c am start-foreground-service -n com.protonvpn.android/org.strongswan.android.logic.CharonVpnService -a android.net.VpnService.DISCONNECT

A veces puedo conectar con él:

su root -c am start-foreground-service -n com.protonvpn.android/org.strongswan.android.logic.CharonVpnService -a android.net.VpnService

Sin embargo, esto no es muy fiable, ya que se trata de un mecanismo interno que omite gran parte de lo que hace la aplicación en el proceso de establecer correctamente una conexión Quick Connect.

Si hay una intención que simule lo que ocurre cuando se pulsa el azulejo de una aplicación, debería proporcionar una solución mucho más limpia.

En este caso, la aplicación cuenta con el servicio com.protonvpn.android.components.QuickTileService y un filtro de acción de intención de android.service.quicksettings.action.QS_TILE Sin embargo, no sé qué hacer a partir de ahí.

5voto

Paul Puntos 33

En resumen

Automatización de un mosaico de Ajustes Rápidos ya visible

# Click on a TileService of the specified component
cmd statusbar click-tile com.package.name/.service.QuickSettingsTileComponent

# You may need to expand the status bar to show the quick settings
# before it'll apply.  Not sure why.
cmd statusbar expand-settings
sleep 0.25 # 250 ms or shorter may be enough
cmd statusbar collapse

Añadir un azulejo de configuración rápida y eliminarlo después de hacer clic

# Expand, add tile, wait for it to initialize
cmd statusbar expand-settings
cmd statusbar add-tile com.package.name/.service.QuickSettingsTileComponent
sleep 0.15

# Click tile, wait for it to react
cmd statusbar click-tile com.package.name/.service.QuickSettingsTileComponent
sleep 0.25

# Remove tile, collapse
cmd statusbar remove-tile com.package.name/.service.QuickSettingsTileComponent
cmd statusbar collapse

Recorrido guiado

Encontrar el nombre del paquete y el componente

Omita esto si ya sabe cómo encontrar el servicio QuickSettings Tile.

  1. Instale una aplicación como apps_Packages Info [F-Droid] para navegar por la lista de aplicaciones instaladas y todos los servicios.

  2. Busque la aplicación cuyo mosaico desea alternar y abra los detalles de la aplicación pulsando sobre ella

    • Ejemplo: Digital Wellbeing es com.google.android.apps.wellbeing
  3. Ampliar la Services en la página de detalles de la solicitud

  4. Encuentre el servicio de azulejos, que tendrá el permiso android.permission.BIND_QUICK_SETTINGS_TILE y anotar el nombre del componente

    • Ejemplo: Grayscale El azulejo QS es .screen.ui.GrayscaleTileService
  5. Anote el nombre completo del paquete y el nombre del componente, y rellene el siguiente comando:

    cmd statusbar click-tile com.package.name/.service.QuickSettingsTileComponent

Ejemplo 1: para alternar Digital Wellbeing 's Grayscale Azulejos QS

cmd statusbar click-tile com.google.android.apps.wellbeing/.screen.ui.GrayscaleTileService

Ejemplo 2: para alternar Digital Wellbeing 's Focus Mode Azulejos QS

cmd statusbar click-tile com.google.android.apps.wellbeing/.focusmode.quicksettings.FocusModeTileService

Automatización de la ficha de ajustes rápidos

Alternar el mosaico de Ajustes Rápidos a través de click-tile no se aplicará hasta que se amplíe la sección de Ajustes Rápidos. En cuanto la sección de Ajustes Rápidos se revele, funcionará, incluso si el propio azulejo está colocado en una página secundaria de azulejos de ajustes rápidos (por ejemplo, la página 2).

Esto funciona incluso cuando la pantalla está bloqueada si el azulejo QS no requiere ser desbloqueado para alternar. Sin embargo, la pantalla debe estar encendida.

Pasos generales

Si el azulejo de Ajustes Rápidos ya está añadido

  1. Encender la pantalla si está apagada
  2. Ampliar los ajustes rápidos a través de cmd statusbar expand-settings
  3. Ejecutar cmd statusbar click-tile [component] comando descubierto arriba
  4. Espere un breve retraso, por ejemplo 250 ms
  5. Opcionalmente, cerrar la barra de estado mediante cmd statusbar collapse
  6. Opcionalmente, apagar la pantalla si no estaba ya encendida

Si no quieres mantener el azulejo de la configuración rápida

  1. Encender la pantalla si está apagada
  2. Ampliar los ajustes rápidos a través de cmd statusbar expand-settings
  3. Añade el mosaico de Ajustes Rápidos a través de cmd statusbar add-tile [component]
  4. Espere un breve retraso, por ejemplo 150 ms
  5. Ejecutar cmd statusbar click-tile [component] comando descubierto arriba
  6. Espere un breve retraso, por ejemplo 250 ms
  7. Ejecutar cmd statusbar remove-tile [component]
  8. Opcionalmente, cerrar la barra de estado mediante cmd statusbar collapse
  9. Opcionalmente, apagar la pantalla si no estaba ya encendida

Ejemplo de shell script (con la contrapartida de Tasker)

Si el azulejo de Ajustes Rápidos ya está añadido

# Wake up device
input keyevent KEYCODE_WAKEUP
#
# Tasker: Add Action -> Display -> Turn On

# Expand the Quick Settings section of the status bar
cmd statusbar expand-settings
#
# Tasker: Add Action -> Code -> Run Shell, copy above

# Click on a TileService of the specified component
cmd statusbar click-tile com.package.name/.service.QuickSettingsTileComponent
#
# Tasker: Add Action -> Code -> Run Shell, copy above, check "Use Root"

# Wait for click to register, 250 ms or shorter may be enough
sleep 0.25
#
# Tasker: Add Action -> Task -> Wait, then set delay to 250 ms

# Optional: collapse status bar
# This won't work when on the lockscreen, but turning the screen off
# also collapses the status bar for you.
cmd statusbar collapse
#
# Tasker: Add Action -> Code -> Run Shell, copy above

# Optional: put device to sleep
# (Up to you: only turn off if the screen wasn't already on.)
input keyevent KEYCODE_POWER
#
# Tasker: Add Action -> Display -> Turn Off, enabling "Lock"

Si no quieres mantener el azulejo de la configuración rápida

# Wake up device
input keyevent KEYCODE_WAKEUP
#
# Tasker: Add Action -> Display -> Turn On

# Expand the Quick Settings section of the status bar
cmd statusbar expand-settings
#
# Tasker: Add Action -> Code -> Run Shell, copy above

# Add the TileService of the specified component, click on it, then
# remove it
# 'sleep' gives time for the tile to initialize and the click to
# register, 150 ms or shorter may be enough
cmd statusbar add-tile com.package.name/.service.QuickSettingsTileComponent
sleep 0.15
cmd statusbar click-tile com.package.name/.service.QuickSettingsTileComponent
sleep 0.25
cmd statusbar remove-tile com.package.name/.service.QuickSettingsTileComponent
#
# Tasker: Add Action -> Code -> Run Shell, copy above, check "Use Root"

# No need to wait for click to register, waiting was done above

# Optional: collapse status bar
# This won't work when on the lockscreen, but turning the screen off
# also collapses the status bar for you.
cmd statusbar collapse
#
# Tasker: Add Action -> Code -> Run Shell, copy above

# Optional: put device to sleep
# (Up to you: only turn off if the screen wasn't already on.)
input keyevent KEYCODE_POWER
#
# Tasker: Add Action -> Display -> Turn Off, enabling "Lock"

NOTA: ¡Se requiere root o ADB!

Si utiliza una aplicación de automatización en lugar de adb shell , cmd statusbar add-tile/click-tile/remove-tile debe ser ejecutado con Root o a través de, por ejemplo, acciones de ADB WiFi.

El otro cmd statusbar Los comandos pueden ser ejecutados sin Root.

Tasker/etc. tienen opciones que no son de Root para despertar la pantalla y ponerla en reposo.

Otros datos

cmd statusbar click-tile parece haber sido añadido con Android 7.0 Así que esto debería funcionar desde que los azulejos de ajustes rápidos personalizados se añadieron oficialmente a Android.

No he encontrado ninguna forma de leer el estado del mosaico de Ajustes Rápidos, por ejemplo, activo/encendido o inactivo/apagado. Para solucionar esto, he comprobado logcat y notificaciones de aplicaciones a través de dumpsys notification para ver lo que está en marcha o en pausa.

Tampoco he encontrado la forma de activar los azulejos de configuración rápida del sistema Android incorporados; afortunadamente, la mayoría de ellos parecen poder conseguirse por otros medios (ajustes seguros, llamadas de servicio, etc.).

1voto

Arctiic Puntos 6

Me estoy saliendo de mi zona de confort con esto, pero viendo que nadie más ha aportado nada, he pensado que puedo mencionarlo para que lo probéis:

1) Ve a G Play Market e instala Nova Launcher .
2) Omitir toda la configuración e ir directamente a la pantalla de inicio con Nova como lanzador por defecto (ya que sólo estás probando la funcionalidad en este punto)
3) Mantenga pulsado el fondo y seleccione Widgets Luego, desplázate hasta Nova Launcher y busca el widget "Actividad" (para mí es el segundo widget); haz una pulsación larga y arrástralo a un espacio vacío en la pantalla de inicio
4) Una vez que sueltes el botón para configurar el widget, se mostrará un mensaje superpuesto y comenzará a cargarse. Dependiendo de tu dispositivo y del número de aplicaciones instaladas, esto puede tardar uno o dos minutos, así que no te alarmes. Una vez que termine de cargarse, desplázate hacia abajo hasta tu aplicación y localiza el hilo de actividad que buscas y selecciónalo (puedes pulsar prolongadamente uno por uno para probar la función también, te devolverá al aviso de superposición anterior si el hilo no ha provocado una caída... si lo hace, tendrás que reiniciar desde el paso 3.

Siempre pensé que era una función interesante, pero nunca llegué a probar lo que era capaz de hacer. Espero que te funcione.

NOTA: Estoy inscrito en la Beta, y tengo la versión Prime (de pago), así que no estoy seguro de si eso puede afectar a esta función específica o no. Es probable que pueda comprar para probar y solicitar el reembolso si es necesario.

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