在本地模拟USB /蓝牙HID设备以注入事件?

时间:2014-06-16 16:27:57

标签: android hid touch-event

是否可以模拟连接到Android的USB或蓝牙设备?

我想创建一个能够在本地模拟HID设备的应用。我的意思是:该应用程序应该让Android相信USB /蓝牙HID设备已连接。我希望这可以让我的应用程序在全球范围内注入触摸事件。无论如何都要模拟(虚拟)设备?请注意,我并不真正关心设备,我只想使用内置的HID输入支持。

我知道很多人已经问过触摸事件注入,但这种方法似乎有点不同。我想要将其用于测试目的,因此InstrumentationTestCase等无法提供帮助。

设备生根可能是一个选项,虽然我也可以想象让我的最终用户手动安装一个专门签名的应用程序(根据https://stackoverflow.com/a/16737083/2923406https://stackoverflow.com/a/22902808/2923406这是有效的,但它将是特定于设备的)。

我知道:

  1. Simulate a mouse input on android - 这家伙似乎是在他自己的应用程序中做到这一点,虽然他的问题没有得到解答;)

  2. http://www.pocketmagic.net/2013/01/programmatically-injecting-events-on-android-part-2/#.U58SqfldVHV - 需要根。有没有人成功使用过这个?此外,该解决方案似乎再次特定于设备。

  3. Bluetooth + simulating mouse - 我想要的东西。手机本身不应该是HID设备,而是使用(虚拟创建的)设备。同样的: https://stackoverflow.com/a/8174973/2923406

  4. 请注意,我想要将手机变成任何类型的HID设备。

3 个答案:

答案 0 :(得分:1)

模拟是一个广义的术语。当我创建我的蓝牙应用程序时,我模拟了#34;蓝牙连接有两种方式。

方式1:使用serial port UART converte r并将其连接到Bluetooth module发射器。

然后,您可以使用CoolTerm之类的终端程序来发送数据。

so。在这种情况下,我编码成一个字符串,以便在与设备成功连接时发送,但是您可以进行无限循环以进行测试,而不需要将手机变成HID设备。

方式2(不容易):在服务器/客户端关系模型中使用您的计算机蓝牙。

这很难做到。您可以做的是将您的pc / mac转换为服务器,将Android手机转换为客户端,反之亦然。为此,您需要编写外部代码,需要在jvm(java虚拟机)上单独编译。可以找到执行此操作的过程here。如果您使用的是Linux机器,则必须单独下载Bluez模块。我没有在除Ubuntu之外的任何其他操作系统上尝试过这个,并且实现功能很痛苦。

希望这有帮助。

答案 1 :(得分:0)

是的,使用AOA2协议检查this& amp; this链接了解详情(您需要将设备切换到附件模式)

答案 2 :(得分:0)

这可能是(或至少更容易)使用Robolectric库,它在本地模拟完整的Android设备。虽然 主要用于测试,但它在本地模拟整个设备的事实 - 包括Bluetooth和USB - 意味着添加它可能是一种更简单的方法。

换句话说,您可以修改它用于在本地模拟这些功能的类(即在没有模拟器或设备的IDE本身中),以便在设备本身上模拟它们。毕竟,它确实提供了这些功能的完整模拟。您可以简单地更改这些蓝牙和USB模拟类,以加载到设备本身而不是本地Robolectric测试“设备”。

这只是一个想法 - 我不能确认这会有效 - 它可能是你开始的好地方。