Как я могу удаленно изменить громкость?

9

Дома я часто подключаю свой андроид к некоторым динамикам, чтобы слушать интернет-радио. Он хотел бы иметь возможность изменить уровень звука с помощью команды на моем ноутбуке.

Я могу открыть оболочку ssh для телефона, но я застрял, находя команду для изменения громкости на Android.

Есть ли команда изменить громкость звука на андроид-оболочке? Или, может быть, есть другой подход без SSH, который я пропустил полностью?

Я использую Android 4.1.

редактировать

Принятый ответ должен работать для корневых устройств. Я все еще стремлюсь получить ответ для нерутированного устройства.

хмурость
источник

Ответы:

13

Посмотрите на симуляцию ключевых событий на Android и найдите "KEYCODE_VOLUME_UP" и "KEYCODE_VOLUME_DOWN".

События могут быть сгенерированы путем выполнения «ввода»:

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

Вашей оболочке нужны соответствующие разрешения, скорее всего, для запуска входных событий. Если вы выполняете аутентификацию с открытым ключом и сохраняете свой закрытый ключ загруженным в память (ssh-add), вы можете создать скрипт-обертку и просто выполнить его без запроса пароля. Примечание. Существуют значительные издержки как для «su», так и для «ввода», в целом, одна настройка громкости занимает всего 2,5 с на моем 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

Похоже, вы должны быть членом группы ввода (здесь GID = 2004), чтобы иметь возможность генерировать ключевые события, используя «ввод». Кроме того, я заметил, что экран не должен быть заблокирован (и / или выключен), потому что блокировка в конечном итоге потребляет все события. Обратите внимание, что команда занимает почти 1 секунду.

CE4
источник
Это выглядит очень многообещающе. Команды принимаются оболочкой без сбоев, но громкость не меняется. Мне, вероятно, придется играть немного больше с моими разрешениями.
Мирк
у меня это работает (используя локально подключенный телефон через "adb shell" с рутом). Скорее всего, это вопрос разрешений. Возможно, посмотрите на logcat, если есть какой-то вывод об отклоненных входных вызовах
ce4
Нет: я не думаю, что у меня есть root-доступ. Кроме того, он говорит мне «не найден» при запуске в качестве пользователя Android. Logcat дает следующий результат: 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 }. Я должен добавить, что я новичок в Android.
Мирк
Хорошо, я не являюсь членом группы ввода (1004). Я рутирую свое устройство однажды и попробую снова.
Мирк
Должна быть опция, чтобы не нуждаться в root, например (неправильно) использовать tasker с намерениями для этого (у tasker, скорее всего, есть необходимые права почти для всего ...)
ce4