Android ADB Shell sendevent не работает

Android ADB Shell sendevent не работает

Я хочу сымитировать нажатие кнопки питания на рутированном устройстве 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

Связанный контент