我能用adb在设备上模拟3次长按吗?

10
我正在尝试使用adb模拟在安卓设备上进行3次(同时的,非连续的)长按操作。我找到了这个链接,看起来很有希望,但是我还没有成功修改它以便使用。您有什么想法可以完成这个操作吗?谢谢。

这个线程还没有解决吗?如果您标记一个已解决的问题,对其他用户和我自己都会有很大帮助。如果您找到了更好的解决方案,请与社区分享。谢谢。 - EyuelDK
我确实成功模拟了您的响应中的长按操作,但是我无法同时模拟3个长按操作。 - Iuli
我正在使用这个解决方案,想知道是否有改进。 - EyuelDK
2个回答

13
我找到了一个非常简单的解决办法来模拟长按。在同一点模拟滑动即可。
input swipe <x1> <y1> <x2> <y2> [duration in milliseconds]

当x1 == x2并且y1 == y2时,这将模拟滑动操作,但由于起点和终点相同,它将作为长按操作处理。


7
我也在处理与此相关的事情;经过大量研究,这是我得到的最佳方案 - 它可以完全满足您的需求,但根据您的上下文环境可能存在一些缺点。
它很简单,只需发送低级输入事件,例如:
模拟触摸按下事件
sendevent /dev/input/event4 1 330 1         // touch down
sendevent /dev/input/event4 0 0 0           // end of report

等待触摸事件完成后,就好像用户的手指仍然在设备上一样(即长按)。模拟触摸释放事件。
sendevent /dev/input/event4 1 330 0         // touch release
sendevent /dev/input/event4 0 0 0           // end of report

语法

sendevent <device> <type> <code> <value> 

为了更好地记录参数,请参考https://android.googlesource.com/platform/external/kernel-headers/+/8bc979c0f7b0b30b579b38712a091e7d2037c77e/original/uapi/linux/input.h

优点:

  • 我发现使用sendevent命令而不是input命令要快得多,很可能是因为您可以发送您感兴趣的特定低级事件。
  • 您可以对设备进行大量控制,例如触摸屏、键盘、按钮、温度计等等......

缺点:

  • 您需要手动确定您感兴趣的设备。在我的示例中,我使用了/dev/input/event4,但不要依赖于此在您的设备上相同。设备因手机而异,因此您可能需要使用命令getevent,然后手动确定哪个设备是您的触摸屏。这可能会变得非常麻烦,特别是如果您正在尝试以编程方式确定任何Android手机的触摸屏设备,因为即使设备名称从技术上来说可能因手机而异。

注意

如果您正在寻找更简单的方法来发送轻击,则可以使用以下命令

input tap <x> <y>

但请注意,您没有决定模拟按下的时间的奢侈(即无法进行长按)。祝好运。

1
谢谢提供的信息!但是,getevent需要root权限,所以对于99.9%的设备来说这并没有什么帮助。 - k1ll3r8e
1
@k1ll3r8e 注意,我使用了 sendevent 并在未root的设备上执行。我不确定现代操作系统的版本,但它在我当时拥有的设备上运行良好。 - EyuelDK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接