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 y
comando:
adb shell input tap x y
Nem todas input
as versões possuem o tap
parâ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
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
- fazer algumas coisas no telefone
- pare o comando adb no pc com
ctrl-c
Repetir os eventos gravados
Este comando fará a conversão hexadecimal em
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
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: