Grave uma série de eventos

Grave uma série de eventos

Eu tenho um HTC 10 que está executando o CM13. Estou tentando enviar eventos de toque para ele por meio de ADB e Send Event. Depois de enviar isto:

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

Recebo um clique no telefone, com showtouches ativado, posso ver que o toque começou, mas que o toque ainda está ativo no telefone.

Baseado na minha leituraaquieaquiassim como em outros lugares, parece que tudo que devo fazer é:

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

ou talvez até apenas

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

no entanto, nenhum desses comandos resulta no encerramento do toque no telefone.

Tentei colocar tudo isso em um script de shell no próprio telefone e executar o script a partir do shell adb, mas resultou na mesma coisa. O começo do toque, e não o fim.

Responder1

Embora não tenha o seu ambiente, analisei o problema. Existem vários artigos, como você, que sempre parecem funcionar para algumas pessoas, mas não para outras. Concluo que existem diferenças entre as combinações de hardware do telefone/versão Android/versão SDK que fazem com que não haja uma solução única para todas as configurações.

Você terá que descobrir o que funciona para você. tendo em mente que uma grande atualização do software sempre pode levá-lo de volta ao ponto de partida.

O método mais simples que encontrei é usar o input tap x ycomando:

adb shell input tap x y

Nem todas inputas versões possuem o tapparâmetro, mas iniciá-lo sem argumentos imprimirá todos os parâmetros disponíveis e a sintaxe:

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>

Outra forma é usarObter eventopara gravar os eventos que acontecem quando você toca na tela. Como retirado deaqui:

Grave uma série de eventos

  1. Configure o pc para gravar dados em um arquivo ( /tmp/android-touch-events.log)

    $ adb shell getevent | grep --line-buffered ^/ | tee /tmp/android-touch-events.log
    
  2. fazer algumas coisas no telefone
  3. pare o comando adb no pc comctrl-c

Repetir os eventos gravados

Este comando fará a conversão hexadecimal emawk

$ 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

Cuidado com o problema de que Getevent exibe seus parâmetros em hexadecimal, mas só aceita entrada em decimal, que o script acima tenta corrigir.

macaco corredoré outra ferramenta que você pode usar, conforme demonstradoaqui:

Você pode querer usarmacaco corredorassim:

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

Você também pode arrastar, iniciar atividades etc. Dê uma olhada na API para Dispositivo Macaco.

Referências:

informação relacionada