我可以使用adb来模拟设备上的3个长按吗?

时间:2015-04-08 08:05:48

标签: android

我尝试使用adb在Android设备上模拟3次(同时不连续)长按。

我找到的最有希望的导致是here,但我还没能修改它以便我可以使用它。

关于如何完成这项壮举的任何想法?

感谢。

2 个答案:

答案 0 :(得分:7)

我发现了一个非常简单的工作来模拟长触摸。在同一点模拟滑动。

input swipe <x1> <y1> <x2> <y2> [duration in milliseconds]

其中x1 == x2,y1 == y2。

这将模拟滑动,但由于您的起点和终点相同,因此它就像是按下按钮

答案 1 :(得分:3)

我也一直致力于与此相关的事情;经过大量的研究,这是我得到的最好的 - 它可以完全按照你想要的那样做,但是根据你的背景有一些缺点。

这很简单,只需发送一个低级输入事件,例如:

模拟触碰事件

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 命令要快得多,很可能是因为你可以发送你感兴趣的特定低级别事件英寸
  • 您可以对设备进行大量控制,例如触摸屏,键盘,按钮,温度计等......

<强> CONS:

  • 您需要手动确定您感兴趣的设备。在我的示例中,我使用了 / dev / input / event4 ,但不要依赖于您的设备上的相同内容。这些设备因手机而异,因此您可能需要使用命令 getevent ,然后手动确定哪个设备是您的触摸屏。这可能会成为一种真正的痛苦,特别是如果您尝试以编程方式确定任何Android手机的触摸屏设备,只是因为即使设备名称在技术上也可能因手机而异。

注意

如果您正在寻找一种更简单的方式来发送水龙头,您可以使用命令

input tap <x> <y>

但要注意,你没有足够的时间来确定模拟按下的时间(不能长按]

祝你好运。