El evento de envío de Android ADB Shell no funciona

El evento de envío de Android ADB Shell no funciona

Quiero simular presionar el botón de encendido en un Samsung Galaxy Tab 2 GT-P5100Android 4.0.4 rooteado usando el shell ADB.

Para hacer esto cambié los permisos relevantes usando:

adb shell
su
chmod 666 /dev/input/event1

¿Cómo puedo saber si esto fue exitoso?

Pensé que el siguiente comando mostraría la pantalla de bloqueo:

input keyevent 116

No me sale ningún error, pero no pasa nada...

Alternativamente, utilicé la forma de texto del código clave que se ve así:

input keyevent KEY_POWER

En este caso, la salida esKilled :¿Qué quiere decir esto?

Por último, probé:

sendevent dev/input/event1 1 116 1 ; sendevent dev/input/event1 1 116 0

Sin suerte :(

¿Qué estoy haciendo mal?

getevent -i /dev/input/event1

genera lo siguiente:

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>

La clave 0074tiene la etiqueta textual KEY_POWER.

Respuesta1

Pulsar el botón de encendido consta de algunos eventos. Puedes comprobarlo escribiendo el comando:

adb shell getevent -l

y luego presione el botón de encendido. En el emulador Nexus 5 el resultado es:

/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 

El archivo de entrada de eventos táctiles /dev/input/event puede ser diferente de un dispositivo a otro. En este caso es evento0.

Antes de escribir eventos en el dispositivo, debe cambiar el modo del archivo de eventos táctiles:

adb shell
chmod 666 /dev/input/event0

Todas las definiciones de claves se pueden encontrar en http://androidxref.com/4.4_r1/xref/prebuilts/ndk/6/platforms/android-9/arch-arm/usr/include/linux/input.h

El valor de las claves sendevent debe serdecimal

Para emular la pulsación del botón de encendido tienes que escribir todos esos 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 

Lo probé en el emulador Nexus 5 y funciona.

Respuesta2

Porque no estás enviando de la manera correcta. No basta con enviar solo

sendevent dev/input/event1 1 116 1 ; sendevent dev/input/event1 1 116 0

Por favor, prueba el siguiente;)

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

información relacionada