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 y
comando:
adb shell input tap x y
No todas input
las versiones tienen el tap
pará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.
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
- hacer algunas cosas por teléfono
- detener el comando adb en la pc con
ctrl-c
Reproducir los eventos grabados
Este comando hará la conversión hexadecimal en
awk
$ 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: