
Я хочу сымитировать нажатие кнопки питания на рутированном устройстве Samsung Galaxy Tab 2 GT-P5100
под управлением Android 4.0.4 с помощью оболочки ADB.
Для этого я изменил соответствующие разрешения с помощью:
adb shell
su
chmod 666 /dev/input/event1
Как узнать, было ли это успешно?
Я думал, что следующая команда отобразит экран блокировки:
input keyevent 116
Ошибок не возникает, но ничего не происходит...
В качестве альтернативы я использовал текстовую форму кода клавиши, которая выглядит следующим образом:
input keyevent KEY_POWER
В этом случае выход Killed
-Что это значит?
Наконец, я попробовал:
sendevent dev/input/event1 1 116 1 ; sendevent dev/input/event1 1 116 0
Безуспешно :(
Что я делаю не так?
getevent -i /dev/input/event1
выводит следующее:
add device 1: /dev/input/event1
bus: 0000
vendor: 0000
product: 0000
version: 0000
name: "sec_key"
location: ""
id: ""
version: 1.0.1
events:
KEY (0001): 0072 0073 0074
input props:
<none>
На ключе 0074
имеется текстовая метка KEY_POWER
.
решение1
Нажатие кнопки питания состоит из нескольких событий. Вы можете проверить это, введя команду:
adb shell getevent -l
и затем нажмите кнопку питания. На эмуляторе nexus 5 результат:
/dev/input/event0: EV_KEY KEY_POWER DOWN
/dev/input/event0: EV_SYN SYN_REPORT 00000000
/dev/input/event0: EV_KEY KEY_POWER UP
/dev/input/event0: EV_SYN SYN_REPORT 00000000
Файл ввода событий касания /dev/input/event может различаться от устройства к устройству. В этом случае это event0.
Перед записью событий на устройство необходимо изменить режим файла событий касания:
adb shell
chmod 666 /dev/input/event0
Все определения ключей можно найти в http://androidxref.com/4.4_r1/xref/prebuilts/ndk/6/platforms/android-9/arch-arm/usr/include/linux/input.h
Значение ключей sendevent должно бытьдесятичная дробь
Чтобы эмулировать нажатие кнопки питания, вам придется записать все эти события:
adb shell sendevent /dev/input/event0 1 116 108
adb shell sendevent /dev/input/event0 0 0 0
adb shell sendevent /dev/input/event0 1 116 103
adb shell sendevent /dev/input/event0 0 0 0
Я проверил на эмуляторе Nexus 5, и все работает.
решение2
Потому что ты не отправляешь в правильном направлении. Недостаточно просто отправить
sendevent dev/input/event1 1 116 1 ; sendevent dev/input/event1 1 116 0
Пожалуйста, просто попробуйте следующий вариант ;)
sendevent dev/input/event1 1 116 1 ; sendevent dev/input/event1 0 0 0 ;sendevent dev/input/event1 1 116 0 ;sendevent dev/input/event1 0 0 0