Sendevent do Android ADB Shell não funciona

Sendevent do Android ADB Shell não funciona

Quero simular o pressionamento do botão liga / Samsung Galaxy Tab 2 GT-P5100desliga 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 0074tem 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

informação relacionada