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

9

Zuhause verbinde ich mein Android oft mit einigen Lautsprechern, um Internetradio zu hören. Es möchte in der Lage sein, den Schallpegel durch einen Befehl auf meinem Laptop zu ändern.

Ich kann eine SSH-Shell für das Telefon öffnen, finde aber keinen Befehl zum Ändern der Lautstärke auf dem Android.

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

Ich verwende Android 4.1.

Bearbeiten

Die akzeptierte Antwort sollte für gerootete Geräte funktionieren. Ich bin immer noch daran interessiert, eine Antwort für ein Gerät ohne Root zu erhalten.

mirk
quelle

Antworten:

13

Schauen Sie sich die Simulation von Keyevents auf Android an und suchen Sie nach "KEYCODE_VOLUME_UP" und "KEYCODE_VOLUME_DOWN".

Ereignisse können durch Ausführen von "Eingabe" 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 entsprechende Berechtigungen, um Eingabeereignisse auszulösen. Wenn Sie die Authentifizierung mit öffentlichem Schlüssel durchführen und Ihren privaten Schlüssel im Speicher behalten (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' entsteht ein erheblicher Overhead. Insgesamt dauert eine einzige Lautstärkeregelung 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

Es scheint, als müssten Sie Mitglied der Eingabegruppe sein (hier GID = 2004), um Keyevents mithilfe von 'input' generieren zu können. Außerdem habe ich festgestellt, dass der Bildschirm nicht gesperrt (und / oder ausgeschaltet) werden muss, da die Sperre letztendlich alle wichtigen Ereignisse verbrauchen würde. Beachten Sie auch, dass der Befehl fast 1 Sekunde dauert.

ce4
quelle
Das sieht sehr vielversprechend aus. Die Befehle werden von der Shell ohne Fehler akzeptiert, aber die Lautstärke ändert sich nicht. Ich werde wahrscheinlich ein bisschen mehr mit meinen Berechtigungen spielen müssen.
Mirk
es funktioniert bei mir (mit einem lokal verbundenen Telefon über "adb shell" mit root). Höchstwahrscheinlich handelt es sich um Berechtigungen. Vielleicht schauen Sie sich logcat an, wenn es eine Ausgabe über abgelehnte '
Eingabe'
Nein, ich glaube nicht, dass ich Root-Zugriff habe. Außerdem wird mir mitgeteilt, dass ich als Android-Benutzer nicht gefunden wurde. Logcat gibt 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.
Mirk
Ok, ich bin kein Mitglied der Eingabegruppe (1004). Ich werde eines Tages mein Gerät rooten und es erneut versuchen.
Mirk
Es muss eine Option geben, kein Root zu benötigen, wie (mis) Tasker mit Absichten dafür zu verwenden (Tasker hat höchstwahrscheinlich die notwendigen Rechte für fast alles ...)
ce4