Wie kann ich die Lautstärke aus der Ferne ändern?

Zu Hause schließe ich oft mein Android an einige Lautsprecher an, um Internetradio zu hören. Es möchte in der Lage sein, die Lautstärke durch einen Befehl auf meinem Laptop zu ändern.

Ich kann eine SSH-Shell zum Telefon öffnen, aber ich finde keinen Befehl, um die Lautstärke auf dem Android zu ändern.

Gibt es einen Befehl zum Ändern der Lautstärke auf der Android-Shell? Oder gibt es vielleicht einen anderen Ansatz ohne ssh, den ich komplett übersehen habe?

Ich verwende Android 4.1.

Bearbeiten

Die akzeptierte Antwort sollte für gerootete Geräte funktionieren. Ich bin immer noch gespannt auf eine Antwort für ein nicht gerootetes Gerät.

Antworten (1)

Sehen Sie sich die Simulation von Tastenereignissen auf Android an und suchen Sie nach „KEYCODE_VOLUME_UP“ und „KEYCODE_VOLUME_DOWN“.

Ereignisse können durch Ausführen von "input" generiert werden:

#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"

Ihre Shell benötigt wahrscheinlich die entsprechenden Berechtigungen, um Eingabeereignisse auszulösen, denke ich. Wenn Sie die Authentifizierung mit öffentlichem Schlüssel durchführen und Ihren privaten Schlüssel im Speicher geladen halten (ssh-add), können Sie ein Wrapper-Skript erstellen und dieses einfach ausführen, ohne nach einer Passphrase gefragt zu werden. Hinweis: Sowohl für „su“ als auch für „input“ gibt es einen erheblichen Overhead, alles in allem dauert eine einzige Lautstärkeanpassung auf meinem HTC Desire 2,5 Sekunden.

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

Anscheinend müssen Sie Mitglied der Eingabegruppe sein (hier GID = 2004), um Keyevents mit "Eingabe" generieren zu können. Außerdem ist mir aufgefallen, dass der Bildschirm nicht gesperrt (und/oder ausgeschaltet) sein muss, da die Sperre schließlich alle Keyevents verbrauchen würde. Beachten Sie auch, dass der Befehl fast 1 Sekunde dauert.

Das sieht sehr vielversprechend aus. Die Befehle werden von der Shell ohne Fehler akzeptiert, aber die Lautstärke ändert sich nicht. Ich werde wohl noch ein bisschen mit meinen Berechtigungen spielen müssen.
Bei mir funktioniert es (mit einem lokal verbundenen Telefon über "adb shell" mit root). Wahrscheinlich ist es eine Frage der Berechtigungen. Schauen Sie sich vielleicht logcat an, wenn es eine Ausgabe über abgelehnte 'Eingabe'-Aufrufe gibt
Nein: Ich glaube nicht, dass ich Root-Zugriff habe. Außerdem sagt es mir "su not found", wenn ich als Android-Benutzer laufe. Logcat gibt die folgende Ausgabe aus: 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 }. Ich muss hinzufügen, dass ich neu bei Android bin.
Ok, ich bin kein Mitglied der Gruppe input(1004). Ich werde mein Gerät eines Tages rooten und es erneut versuchen.
Es muss eine Option geben, Root nicht zu benötigen, wie Tasker (Missbrauch) mit Absichten dafür zu verwenden (Tasker hat höchstwahrscheinlich die notwendigen Rechte für fast alles ...)
Tasker funktioniert auf nicht gerooteten Geräten nur mit einem AccessibilityService . Referenz/Android/Barrierefreiheitsdienst/…