Comment puis-je changer le volume à distance?

9

À la maison, je connecte souvent mon Android à certains haut-parleurs pour écouter la radio Internet. Il aimerait pouvoir changer le niveau sonore via une commande sur mon ordinateur portable.

Je peux ouvrir un shell ssh sur le téléphone, mais je suis coincé à trouver une commande pour changer le volume sur l'androïde.

Existe-t-il une commande pour modifier le volume audio sur le shell Android? Ou peut-être y a-t-il une approche différente sans ssh que j'ai complètement ratée?

J'utilise Android 4.1.

Éditer

La réponse acceptée devrait fonctionner pour les appareils enracinés. Je souhaite toujours obtenir une réponse pour un appareil non rooté.

obscur
la source

Réponses:

13

Jetez un œil à la simulation d'événements clés sur Android et recherchez "KEYCODE_VOLUME_UP" et "KEYCODE_VOLUME_DOWN".

Les événements peuvent être générés en exécutant "input":

#local shell:
input keyevent 24 #vol up
input keyevent 25 #vol down
#remotely using ssh
ssh your-phone input keyevent 24 #vol up
ssh your-phone input keyevent 25 #vol down

# 'su -c command' to make it run as root (if not already). EDIT: now escaped properly.
ssh your-phone su -c "input\ keyevent\ 24" #vol up
ssh your-phone su -c "input\ keyevent\ 25" #vol down"

Votre shell a probablement besoin des autorisations appropriées pour déclencher des événements d'entrée, je suppose. Si vous effectuez l'authentification par clé publique et conservez votre clé privée chargée en mémoire (ssh-add), vous pouvez créer un script d'encapsuleur et l'exécuter simplement sans être invité à saisir une phrase secrète. Remarque: Il y a un surcoût considérable pour les deux «su» et «entrée», dans l'ensemble un seul réglage du volume prend 2,5 secondes pour terminer sur mon HTC Desire.

EDIT2:

shell@android:/ $ id
uid=2000(shell) gid=2000(shell) groups=1003(graphics),1004(input),[...]
shell@android:/ $ time input keyevent 24                                       
    0m0.92s real     0m0.29s user     0m0.06s system

Il semble que vous devez être membre du groupe d'entrée (ici GID = 2004) pour avoir la capacité de générer des événements clés en utilisant «entrée». De plus, j'ai remarqué que l'écran ne doit pas être verrouillé (et / ou éteint), car le verrou consommerait éventuellement tous les événements clés. Notez également que la commande prend presque 1 seconde.

ce4
la source
Cela semble très prometteur. Les commandes sont acceptées par le shell sans échec, mais le volume ne change pas. Je vais probablement devoir jouer un peu plus avec mes permissions.
mirk
cela fonctionne pour moi (en utilisant un téléphone connecté localement via "shell adb" avec root). C'est très probablement une question de permissions. Peut-être regardez logcat s'il y a une sortie sur les appels d'entrée rejetés
ce4
Non: je ne pense pas avoir un accès root. De plus, il m'indique 'su not found' lors de l'exécution en tant qu'utilisateur Android. Logcat donne le résultat suivant: I/Input ( 2502): InjectKeyEvent: KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_VOLUME_UP, scanCode=0, metaState=0, flags=0x0, repeatCount=0, eventTime=399847, downTime=399847, deviceId=-1, source=0x101 } I/Input ( 2502): InjectKeyEvent: KeyEvent { action=ACTION_UP, keyCode=KEYCODE_VOLUME_UP, scanCode=0, metaState=0, flags=0x0, repeatCount=0, eventTime=399847, downTime=399847, deviceId=-1, source=0x101 }. Je dois ajouter que je suis nouveau sur Android.
mirk
Ok, je ne suis pas membre du groupe d'entrée (1004). Je vais rooter mon appareil un jour et réessayer.
mirk
Il doit y avoir une option pour ne pas avoir besoin de root, comme (mal) utiliser tasker avec des intentions pour cela (le tasker a probablement les droits nécessaires pour presque tout ...)
ce4