Come posso modificare il volume da remoto?


9

A casa collego spesso il mio androide ad alcuni altoparlanti, per ascoltare la radio via Internet. Vorrebbe essere in grado di cambiare il livello del suono attraverso un comando sul mio laptop.

Posso aprire una shell ssh sul telefono, ma sono bloccato a trovare un comando per modificare il volume su Android.

Esiste un comando per modificare il volume dell'audio sulla shell Android? O forse c'è un approccio diverso senza ssh che mi sono perso completamente?

Uso Android 4.1.

modificare

La risposta accettata dovrebbe funzionare per i dispositivi rooted. Sono ancora entusiasta di ottenere una risposta per un dispositivo non root.

Risposte:


13

Dai un'occhiata alla simulazione di eventi chiave su Android e cerca "KEYCODE_VOLUME_UP" e "KEYCODE_VOLUME_DOWN".

Gli eventi possono essere generati eseguendo "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"

Probabilmente la tua shell ha bisogno delle autorizzazioni appropriate per attivare eventi di input. Se esegui l'autenticazione con chiave pubblica e mantieni la tua chiave privata caricata in memoria (ssh-add) puoi creare uno script wrapper ed eseguirlo senza che ti venga richiesta una passphrase. Nota: c'è un notevole sovraccarico sia per 'su' che per 'input', tutto sommato in una singola regolazione del volume richiede 2,5 secondi per essere completato sul mio 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

Sembra che tu debba essere membro del gruppo di input (qui GID = 2004) per avere la capacità di generare eventi chiave usando 'input'. Inoltre, ho notato che lo schermo non deve essere bloccato (e / o spento), perché il blocco consumerebbe alla fine tutti gli eventi chiave. Si noti inoltre che il comando richiede quasi 1 secondo.


Sembra molto promettente. I comandi sono accettati dalla shell senza errori, ma il volume non cambia. Probabilmente dovrò giocare un po 'di più con le mie autorizzazioni.
mirk,

funziona per me (utilizzando un telefono connesso localmente tramite "adb shell" con root). Molto probabilmente si tratta di autorizzazioni. Forse guardate logcat se c'è qualche output sulle chiamate "input" rifiutate
ce4

No: non credo di avere accesso come root. Inoltre, mi dice 'su non trovato' quando si esegue come utente Android. Logcat dà il seguente risultato: 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 }. Devo aggiungere che sono nuovo su Android.
mirk,

Ok, non sono un membro del gruppo input (1004). Un giorno eseguirò il root del mio dispositivo e riproverò.
mirk,

Ci deve essere un'opzione per non aver bisogno di root, come (mis) usare tasker con le intenzioni per quello (il tasker molto probabilmente ha i diritti necessari per quasi tutto ...)
ce4,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.