2 votes

Comment puis-je émuler le fait d'appuyer sur la tuile des paramètres rapides d'une autre application ?

J'aimerais appuyer de manière programmée sur la tuile des paramètres rapides d'une autre application, par exemple à partir du shell ou de Tasker.


Dans ce cas particulier, j'aimerais appuyer sur la tuile de ProtonVPN afin d'automatiser la connexion et la déconnexion.

Après avoir démonté l'application, j'ai découvert que je pouvais déconnecter le VPN de manière fiable :

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

avec qui je peux parfois me connecter :

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

Cependant, ce n'est pas très fiable car il s'agit d'un mécanisme interne qui contourne une grande partie de ce que fait l'application pour établir correctement une connexion rapide.

S'il existe une intention qui simule ce qui se passe lorsque l'on appuie sur la tuile d'une application, elle devrait fournir une solution beaucoup plus propre.

Dans ce cas, l'application dispose du service com.protonvpn.android.components.QuickTileService et un filtre d'action intentionnel de android.service.quicksettings.action.QS_TILE mais je ne sais plus où donner de la tête.

5voto

Shane S. Points 151

En bref

Automatisation d'une tuile de réglages rapides déjà 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

Ajout d'une tuile de réglages rapides et suppression de celle-ci après un clic

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

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

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

Visite guidée

Recherche du nom du paquet et du composant

Sautez cette étape si vous savez déjà comment trouver le service QuickSettings Tile.

  1. Installez une application comme apps_Packages Info [F-Droid] pour parcourir la liste des applications installées et de tous les services.

  2. Trouvez l'application dont vous voulez faire basculer la tuile et ouvrez les détails de l'application en appuyant dessus.

    • Digital Wellbeing es com.google.android.apps.wellbeing
  3. Élargir le Services dans la page de détail de l'application

  4. Trouvez le service de tuiles, qui aura la permission android.permission.BIND_QUICK_SETTINGS_TILE puis notez le nom du composant

    • Bedtime mode (anciennement Grayscale ) La tuile QS est .screen.ui.GrayscaleTileService
  5. Notez le nom complet du paquet et le nom du composant, et remplissez la commande ci-dessous :

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

Exemple 1 : pour basculer Digital Wellbeing 's Bedtime mode (anciennement Grayscale ) Tuile QS

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

Exemple 2 : pour basculer Digital Wellbeing 's Focus Mode Tuile QS

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

Automatiser la tuile des réglages rapides

Sur certaines versions d'Android, le basculement de la tuile des paramètres rapides via click-tile ne s'appliquera pas tant que la section Paramètres rapides ne sera pas développée. Dès que la section des paramètres rapides est révélée, elle fonctionnera, même si la tuile elle-même est placée sur une page secondaire de tuiles de paramètres rapides (par exemple, la page 2).

Cela fonctionne même lorsque l'écran est verrouillé si la tuile QS ne nécessite pas de déverrouillage pour basculer. Cependant, l'écran doit être allumé.

Essayez d'abord de ne pas développer la section des paramètres rapides, et si cela ne fonctionne pas, essayez plutôt la méthode de développement.

Mesures générales

Si la tuile Paramètres rapides est déjà ajoutée

  1. Allumer l'écran s'il est éteint
  2. Étendre les paramètres rapides via cmd statusbar expand-settings
    • Vous n'en avez peut-être pas besoin - essayez d'abord sans.
  3. Exécuter cmd statusbar click-tile [component] découverte ci-dessus
  4. Attendez un court délai, par exemple 250 ms
  5. En option, fermer la barre d'état via cmd statusbar collapse
  6. Optionnellement, éteindre l'écran s'il n'était pas déjà allumé.

Si vous ne voulez pas garder la tuile des paramètres rapides

  1. Allumer l'écran s'il est éteint
  2. Étendre les paramètres rapides via cmd statusbar expand-settings
    • Comme précédemment, cela peut ne pas être nécessaire - essayez d'abord sans.
  3. Ajoutez le carreau des paramètres rapides via cmd statusbar add-tile [component]
  4. Attendez un court délai, par exemple 200 ms
  5. Exécuter cmd statusbar click-tile [component] découverte ci-dessus
  6. Attendez un court délai, par exemple 350 ms
  7. Exécuter cmd statusbar remove-tile [component]
  8. En option, fermer la barre d'état via cmd statusbar collapse
  9. Optionnellement, éteindre l'écran s'il n'était pas déjà allumé.

Exemple de script shell (avec son homologue Tasker)

Si la tuile Paramètres rapides est déjà ajoutée

# 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, 350 ms or shorter may be enough
sleep 0.35
#
# Tasker: Add Action -> Task -> Wait, then set delay to 350 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 vous ne voulez pas garder la tuile des paramètres rapides

# 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, 200 ms or shorter may be enough
cmd statusbar add-tile com.package.name/.service.QuickSettingsTileComponent
sleep 0.20
cmd statusbar click-tile com.package.name/.service.QuickSettingsTileComponent
sleep 0.35
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"

NOTE : Root ou ADB est nécessaire !

Si vous utilisez une application d'automatisation plutôt que adb shell , cmd statusbar add-tile/click-tile/remove-tile doit être exécuté avec Root ou via, par exemple, les actions ADB WiFi.

L'autre cmd statusbar peuvent être exécutées sans Root.

Tasker/etc ont des options non-Root pour réveiller l'écran et le mettre en veille.

Autres détails

cmd statusbar click-tile semble avoir été ajouté avec Android 7.0 Les tuiles de réglage rapide personnalisées ont été officiellement ajoutées à Android, ce qui devrait donc fonctionner.

Je n'ai pas trouvé de moyen de lire l'état de la tuile Paramètres rapides, par exemple actif/activé ou inactif/ désactivé. Pour contourner ce problème, j'ai vérifié logcat et des notifications d'applications via dumpsys notification pour voir ce qui est en cours ou en pause.

Je n'ai pas non plus trouvé comment faire basculer les tuiles intégrées des paramètres rapides du système Android ; heureusement, la plupart d'entre eux semblent pouvoir être atteints par d'autres moyens (paramètres sécurisés, appels de service, etc.).

1voto

Arctiic Points 360

Je sors de ma zone de confort avec celle-ci, mais comme personne d'autre n'a eu d'idée, j'ai pensé que je pouvais la mentionner pour que vous la testiez :

  1. Allez sur G Play Market et installez Nova Launcher .
  2. Sautez toute la configuration et allez directement à l'écran d'accueil avec Nova comme lanceur par défaut (puisque vous ne faites que tester les fonctionnalités à ce stade).
  3. Appuyez longuement sur votre arrière-plan et sélectionnez Widgets puis faites défiler jusqu'à Nova Launcher et trouvez le widget "Activity" (pour moi, c'est le deuxième widget) ; appuyez longuement puis faites glisser vers un espace vide sur l'écran d'accueil.
  4. Une fois que vous avez relâché le bouton pour définir le widget, une invite de superposition s'affiche et commence à se charger. En fonction de votre appareil et du nombre d'applications installées, cela peut prendre une minute ou deux, alors ne vous inquiétez pas. Une fois le chargement terminé, faites défiler votre application, localisez le fil d'activité que vous recherchez et sélectionnez-le (vous pouvez également appuyer longuement sur les fils un par un pour tester la fonction, ce qui vous ramènera à l'invite précédente de la superposition). si le fil de discussion n'a pas provoqué de crash... si c'est le cas, vous devrez recommencer à partir de l'étape 3.

J'ai toujours pensé que c'était une fonction intéressante, mais je n'ai jamais eu l'occasion de tester ce qu'elle pouvait faire. J'espère que cela fonctionnera pour vous !

NOTE : Je suis inscrit à la bêta et j'ai la version Prime (payante), donc je ne sais pas si cela peut affecter cette fonction spécifique ou non. Vous pouvez probablement acheter pour tester et demander un remboursement si nécessaire.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X