
Quero simular o pressionamento do botão liga / Samsung Galaxy Tab 2 GT-P5100
desliga em um Android 4.0.4 com root usando o shell ADB.
Para fazer isso, alterei as permissões relevantes usando:
adb shell
su
chmod 666 /dev/input/event1
Como posso saber se isso foi bem sucedido?
Achei que o seguinte comando exibiria a tela de bloqueio:
input keyevent 116
Não recebo erros, mas nada acontece ...
Alternativamente, usei o formato de texto do código-chave que se parece com isto:
input keyevent KEY_POWER
Neste caso, a saída é Killed
-O que isto significa?
Por último, tentei:
sendevent dev/input/event1 1 116 1 ; sendevent dev/input/event1 1 116 0
Sem sorte :(
O que estou fazendo de errado?
getevent -i /dev/input/event1
gera o seguinte:
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>
A chave 0074
tem o rótulo textual KEY_POWER
.
Responder1
O pressionamento do botão liga/desliga consiste em alguns eventos. Você pode verificar digitando o comando:
adb shell getevent -l
e pressione o botão liga / desliga. No emulador Nexus 5, o resultado é:
/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
O arquivo de entrada do evento de toque /dev/input/event pode ser diferente de dispositivo para dispositivo. Neste caso é evento0.
Antes de gravar eventos no dispositivo, você deve alterar o modo do arquivo de evento de toque:
adb shell
chmod 666 /dev/input/event0
Todas as definições de chaves podem ser encontradas em http://androidxref.com/4.4_r1/xref/prebuilts/ndk/6/platforms/android-9/arch-arm/usr/include/linux/input.h
O valor das chaves sendevent deve serdecimal
Para emular o pressionamento do botão liga / desliga, você deve escrever todos esses eventos:
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
Eu testei no emulador Nexus 5 e funciona.
Responder2
Porque você não está enviando da maneira certa. Não basta enviar apenas
sendevent dev/input/event1 1 116 1 ; sendevent dev/input/event1 1 116 0
Por favor, tente o abaixo;)
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