通过/ dev / uinput在Android中注入多点触控手势

时间:2013-01-02 13:58:56

标签: android linux root multi-touch

我正在寻找一种将多点触控手势注入Android的方法。到目前为止,我打开/ dev / uinput并写入文件描述符。该解决方案适用于“一次”触摸。如何注入多点触控输入?

3 个答案:

答案 0 :(得分:4)

根据我的经验,触摸手势的/dev/uinput将变得艰难。我实现了单点触控,仅适用于某些设备。在其他方面,它只会产生“悬停”的效果。

然后我使用了android的触摸设备/dev/input/eventX(如果你有root权限,你可以使用它)。查看触摸输入如何工作的最佳方法是在设备上使用getevent /dev/input/eventX二进制文件。 linux multitouch protocol输入非常好地描述了多点触控功能和行为,并且在您解读十六进制代码(并将它们转换为更有意义的内容,如{{1 }})。

简而言之:

  1. 找出哪个getevent设备是触摸输入设备。它是一个注册ABS_MT_ *事件的设备。您可以使用ABS_MT_POSITION_X命令(在/dev/input/eventX中运行)
  2. 来查看此信息
  3. 假设支持此类事件的输入设备是getevent -il
  4. adb shell发出/dev/input/event2命令并触摸屏幕。
  5. 您将在屏幕上获得一些输出,其中包含三列:
    1. 事件类别(适用于getevent /dev/input/event2,此为adb shell
    2. 事件代码(EV_ABS0003
    3. 事件值(即插槽号,坐标,压力或事件定义的任何内容)
  6. 查看事件的外观并重播它们。您将能够以这种方式注入多点触控事件和手势。
  7. 对于instace,ABS_MT_SLOT的注释输出为双击:

    0x002f

答案 1 :(得分:2)

您可以在Google代码上使用事件注入器库:http://code.google.com/p/android-event-injector/,为触摸屏设置偶数显示器,并准确查看为多点触控事件发送/使用的消息。

然后,您可以使用正确的参数简单地重现这些消息。

答案 2 :(得分:0)

不确定这是否可行但是(我假设您是从应用程序执行此操作)您可以拥有一系列同时运行的AsyncTasks(并写入/ dev / uinput)来模拟同时触摸