
Quiero simular presionar el botón de encendido en un Samsung Galaxy Tab 2 GT-P5100
Android 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 0074
tiene 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