我正在寻找一种将多点触控手势注入 Android 的方法。到目前为止,我打开 /dev/uinput 并写入文件描述符。此解决方案适用于“单”触摸。如何注入多点触控输入?
问问题
3626 次
2 回答
4
根据我的经验,/dev/uinput
触摸手势会很困难。我实现了单点触控,它只适用于某些设备。在其他人身上,它只会产生“悬停”的效果。
然后我使用了 android 的触摸设备/dev/input/eventX
(如果你有 root 访问权限,你可以使用它)。查看触摸输入如何工作的最佳方法是getevent /dev/input/eventX
在设备本身上使用二进制文件。linux 多点触控协议输入很好地描述了多点触控功能和行为,并为您getevent
在破译十六进制代码(并将它们翻译成更有意义的东西,例如ABS_MT_POSITION_X
)后将看到的内容提供了很好的背景。
简而言之:
- 找出哪些
/dev/input/eventX
设备是触摸输入设备。它是一个注册了 ABS_MT_* 事件的设备。您可以使用getevent -il
命令查看此内容(在 中运行adb shell
) - 假设支持此类事件的输入设备是
/dev/input/event2
. - 从屏幕发出
getevent /dev/input/event2
命令adb shell
并触摸屏幕。 - 您将在屏幕上获得一些输出,其中包含三列:
- 事件类别(对于
EV_ABS
,这是0003
) - 事件代码(因为
ABS_MT_SLOT
这是0x002f
- 事件值(即槽号、坐标、压力或事件定义的任何内容)
- 事件类别(对于
- 查看事件的外观并重播它们。您将能够以这种方式注入多点触控事件和手势。
对于实例,getevent /dev/input/event2
双击的注释输出:
0003 002f 00000001 // slot 1 (finger 1)
0003 0039 000019fe // tracking id for slot 1
0003 0035 00000146 // position x
0003 0036 00000117 // position y
0003 0030 00000033 // touch area
0000 0000 00000000 // sync
0003 002f 00000000 // slot 0 (finger 0)
0003 0039 000019ff // tracking id for slot 0
0003 0035 000000cb // position x
0003 0036 00000164 // position y
0003 0030 00000028 // touch area
0000 0000 00000000 // sync
0003 0039 ffffffff // relese finger 0
0000 0000 00000000 // sync
0003 002f 00000001 // slot 1
0003 0039 ffffffff // release finger 1
0000 0000 00000000 // sync
于 2014-06-11T21:38:18.487 回答
0
不确定这是否可行,但是(我假设您是从应用程序中执行此操作)您可以同时运行一系列 AsyncTask(并写入 /dev/uinput)以模拟同时触摸
于 2013-01-22T00:42:53.860 回答