Grabar una serie de eventos.

Grabar una serie de eventos.

Tengo un HTC 10 que ejecuta CM13. Estoy intentando enviarle eventos táctiles mediante ADB y Enviar evento después de enviar esto:

adb shell
sendevent /dev/input/event6 3 57 0
sendevent /dev/input/event6 3 53 300
sendevent /dev/input/event6 3 54 400
sendevent /dev/input/event6 3 48 5
sendevent /dev/input/event6 3 58 50
sendevent /dev/input/event6 0 2 0
sendevent /dev/input/event6 0 0 0

Recibo un clic en el teléfono, con showtouches activado, puedo ver que el toque ha comenzado, pero que el toque todavía está activo en el teléfono.

Basado en mi lecturaaquíyaquíasí como en otros lugares, parece que todo lo que debería hacer es:

sendevent /dev/input/event6 3 57 -1
sendevent /dev/input/event6 0 2 0
sendevent /dev/input/event6 0 0 0

o tal vez incluso solo

sendevent /dev/input/event6 3 57 -1
sendevent /dev/input/event6 0 0 0

sin embargo, ninguno de estos comandos da como resultado que se finalice el contacto en el teléfono.

Intenté poner todo esto en un script de shell en el teléfono y ejecutar el script desde adb shell, sin embargo, resultó lo mismo. El comienzo del toque, y no el final.

Respuesta1

Aunque no tengo su entorno, he investigado el problema. Se pueden encontrar varios artículos, como usted, que siempre parecen funcionar para algunas personas pero no para otras. Mi conclusión es que existen diferencias entre las combinaciones de hardware de teléfono/versión de Android/versión de SDK que hacen que no exista una solución única para todas las configuraciones.

Tendrás que descubrir qué funciona para ti. teniendo en cuenta que una actualización importante del software siempre puede devolverte al punto de partida.

El método más simple que he encontrado es usar el input tap x ycomando:

adb shell input tap x y

No todas inputlas versiones tienen el tapparámetro, pero iniciarlo sin argumentos imprimirá todos los parámetros disponibles y la sintaxis:

shell@m0:/ $ input
input
usage: input ...
       input text <string>
       input keyevent <key code number or name>
       input [touchscreen|touchpad|touchnavigation] tap <x> <y>
       input [touchscreen|touchpad|touchnavigation] swipe <x1> <y1> <x2> <y2> [duration(ms)]
       input trackball press
       input trackball roll <dx> <dy>

Otra forma es utilizarObtener eventopara registrar los eventos que suceden cuando tocas la pantalla. Tomado deaquí:

Grabar una serie de eventos.

  1. Configure la computadora para registrar datos en un archivo ( /tmp/android-touch-events.log)

    $ adb shell getevent | grep --line-buffered ^/ | tee /tmp/android-touch-events.log
    
  2. hacer algunas cosas por teléfono
  3. detener el comando adb en la pc conctrl-c

Reproducir los eventos grabados

Este comando hará la conversión hexadecimal enawk

$ awk '{printf "%s %d %d %d\n", substr($1, 1, length($1) -1), strtonum("0x"$2), strtonum("0x"$3), strtonum("0x"$4)}' /tmp/android-touch-events.log | xargs -l adb shell sendevent

Tenga cuidado con el problema de que Getevent muestra sus parámetros en hexadecimal pero solo acepta entradas en decimal, lo que el script anterior intenta corregir.

corredor de monoses otra herramienta que puede utilizar, como se demuestraaquí:

Es posible que desee utilizarcorredor de monoscomo esto:

$ monkeyrunner
>>> from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
>>> device = MonkeyRunner.waitForConnection()
>>> device.touch(200, 400, MonkeyDevice.DOWN_AND_UP)

También puedes arrastrar, iniciar actividades, etc. Echa un vistazo a la API para MonoDispositivo.

Referencias:

información relacionada