Como posso alterar remotamente o volume?


9

Em casa, costumo conectar meu android a alguns alto-falantes, para ouvir rádio na internet. Gostaria de poder alterar o nível do som através de um comando no meu laptop.

Posso abrir um shell ssh para o telefone, mas não consigo encontrar um comando para alterar o volume no android.

Existe um comando para alterar o volume do áudio no shell do android? Ou talvez haja uma abordagem diferente sem ssh que eu perdi completamente?

Estou executando o Android 4.1.

Editar

A resposta aceita deve funcionar para dispositivos raiz. Ainda estou interessado em obter uma resposta para um dispositivo não rooteado.

Respostas:


13

Dê uma olhada na simulação de eventos-chave no Android e pesquise "KEYCODE_VOLUME_UP" e "KEYCODE_VOLUME_DOWN".

Eventos podem ser gerados executando "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"

Seu shell precisa de permissões apropriadas, provavelmente para disparar eventos de entrada, eu acho. Se você faz autenticação de chave pública e mantém sua chave privada carregada na memória (ssh-add), é possível criar um script de wrapper e apenas executá-lo sem ser solicitada uma senha. Nota: Existe uma sobrecarga considerável para 'su' e 'input', tudo em um único ajuste de volume leva 2,5 segundos para ser concluído no meu 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

Parece que você precisa ser membro do grupo de entrada (aqui GID = 2004) para ter a capacidade de gerar eventos-chave usando 'entrada'. Além disso, notei que a tela não deve estar bloqueada (e / ou desativada), porque a trava consumiria todos os eventos de teclas eventualmente. Observe também que o comando leva quase 1 segundo.


Isso parece muito promissor. Os comandos são aceitos pelo shell sem falha, mas o volume não muda. Provavelmente terei que jogar um pouco mais com minhas permissões.
— negrume

funciona para mim (usando um telefone conectado localmente via "adb shell" com root). Provavelmente é uma questão de permissões. Talvez olhar para logcat se há alguma saída sobre chamadas rejeitadas 'INPUT'
— CE4

Não: acho que não tenho acesso root. Além disso, ele diz 'su not found' ao executar como usuário do Android. Logcat dá o seguinte resultado: 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 }. Eu tenho que acrescentar que eu sou novo no android.
— negrume

Ok, eu não sou um membro do grupo de entrada (1004). Vou torcer meu dispositivo um dia e tentar novamente.
— negrume

Deve haver uma opção para não precisar de raiz, como (des) usando tasker com intenções para que (Tasker provavelmente tem os direitos necessários para quase tudo ...)
— CE4
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.