使用ADB来触发手机的触摸,但无法释放


4

我有一个运行CM13的HTC 10我试图通过ADB发送触摸事件并发送事件发送后:

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

我点击了手机,打开了showtouches,我可以看到触摸已经开始,但触摸仍然在手机上有效。

基于我在这里这里以及其他地方的阅读,我似乎应该做的就是:

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

或者甚至只是

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

但是,这些命令都不会导致手机上的触摸结束。

我尝试将所有这些放在手机本身的shell脚本上,并从adb shell运行脚本,但这导致了同样的事情。触摸的开始,而不是结束。


虽然我不确定这是否是正确的问题,我也有同样的问题,所以我已经给了它一个赏金。
2017年

Answers:


10

虽然没有你的环境,但我已经研究过这个问题。正如您所做的那样,可以找到各种各样的文章,这些文章似乎总是适用于某些人而不适用于其他人。我的结论是,手机硬件/ Android版本/ SDK版本的组合之间存在差异,这使得所有设置都没有一个解决方案。

您必须找出适合您的方法。请记住,软件的重大更新总能让您回到起点。

我发现最简单的方法是使用input tap x y命令:

adb shell input tap x y

并非所有input版本都具有该tap参数,但是在没有参数的情况下启动它将打印所有可用参数和语法:

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>

另一种方法是使用Getevent记录触摸屏幕时发生的事件。从这里开始

记录一系列事件

  1. 设置pc以在文件中记录数据(/tmp/android-touch-events.log

    $ adb shell getevent | grep --line-buffered ^/ | tee /tmp/android-touch-events.log
    
  2. 在手机上做一些事情
  3. 用PC停止adb命令 ctrl-c

重播录制的事件

此命令将执行十六进制转换 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

请注意Getevent以十六进制显示其参数但只接受十进制输入的问题,上述脚本试图纠正。

monkeyrunner是另一种工具,您可以使用,这表现在这里

你可能想要像这样使用monkeyrunner

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

你也可以做一个拖动,启动活动等。看看MonkeyDevice的api 。

参考文献:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.