作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在寻找一种将多点触控手势注入(inject) Android 的方法。到目前为止,我打开/dev/uinput 并写入文件描述符。此解决方案适用于“一次”触摸。如何注入(inject)多点触控输入?
最佳答案
根据我的经验,触摸手势的 /dev/uinput
会很困难。我实现了单点触控,它只在某些设备上有效。在其他人身上,它只会产生“悬停”的效果。
然后我使用了 android 的触摸设备 /dev/input/eventX
(如果你有 root 访问权限,你可以)。查看触摸输入如何工作的最佳方法是在设备本身上使用 getevent/dev/input/eventX
二进制文件。 linux multitouch protocol input 很好地描述了多点触控功能和行为,并为您破译十六进制代码(并将它们转换为更有意义的内容,如 ABS_MT_POSITION_X
).
简而言之:
/dev/input/eventX
设备是触摸输入设备。它是一个注册了 ABS_MT_* 事件的设备。您可以使用 getevent -il
命令查看此信息(在 adb shell
中运行)/dev/input/event2
。 adb shell
发出 getevent/dev/input/event2
命令并触摸屏幕。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
关于android - 通过/dev/uinput 在 Android 中注入(inject)多点触控手势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14123379/
我是一名优秀的程序员,十分优秀!