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

2 ответа2

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 может быть разным на разных устройствах. В этом случае это событие0.

Перед записью событий на устройство необходимо изменить режим файла событий касания:

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

Значение ключей отправления должно быть десятичным

Чтобы эмулировать нажатие кнопки питания, вы должны записать все эти события:

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, и он работает.

0

Потому что вы отправляете неправильно. Недостаточно только отправить

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .