Android手游手柄touch猜想

在之前的讨论中,根据蓝牙鼠标和手指点击会发生冲突断触的现象,我们得知了一个“常识”,Android手机中不同的设备touch事件会断触,想要不断触,必须重构MotionEvent事件,

最近发现某些游戏手柄,竟然做到了和屏幕touch不断触,

看起来确实很强,猜测一下其大概原理,

我们需要打开开发者选项中input相关的点击轨迹显示,来方便查看touch事件,

1.为什么有input注入的权限?

一般是系统级应用才可以,或者是通过辅助功能认证的才有权限,

但是通过app_process方式来启动的程序,就可以有shell权限,模拟调试状态,参考如下:

android免root运行adb高级权限命令,例如修改手机设置等(转)_宓庆堂的博客-CSDN博客_adb权限受限

2. 合并手柄和屏幕的touch事件,才可以做到不断触,这个是怎么做的呢?

一个方案是通过InputFilter来进行,但这个手柄看起来没有使用InputFilter,手柄连接激活后,getevent不再打印屏幕touch的信息了,很奇怪。

猜测是用了某种方案,独占了/dev/input/eventX 设备,不知道用的什么巧妙的方式,期待大佬解答。

2022-4-9 update

有大佬了解底层这一块,帮忙解答了,确实是独占了设备:

这里的grab的意思是设备被抓或者设备被独占的意思,通过EVIOCGRAB ioctl设置,设置后当前设备变成唯一的来自设备的所有输入事件的接收者。

我们之前说过,当多个应用打开这个eventx的时候,都会接收到事件,但是当某一个应用通过EVIOCGRAB ioctl设置后,就只有当前应用可以接收到事件了
————————————————
版权声明:本文为CSDN博主「dianlong_lee」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ldl617/article/details/117350717

在getevent的源码中,添加 ioctl(fd, EVIOCGRAB), 可以发现,会独占设备事件。

另外一个疑问,多个进程打开了设备,如果A进程接收数据后,处理比较慢,比如sleep几秒,

会不会导致接收的总数据比其他进程少?即丢失了数据?

相关资料

​​​​​​linux input子系统 -- 05 数据上报_dianlong_lee的博客-CSDN博客

Linux input子系统分析之四 input handler驱动实例evdev分析_jerry_chg的博客-CSDN博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值