问题描述
我有一个蓝牙游戏手柄连接到我的 Android 设备,它连接和传输良好。
从操纵杆获取数据的唯一方法似乎来自 onGenericMotionEvent
或 dispatchGenericMotionEvent
从文档中,onGenericMotionEvent
:
通用运动事件描述了操纵杆移动、鼠标悬停、触控板触摸、滚轮移动和其他输入事件。
我已经检查了我输入的来源,并验证了来源、控制器规格等是否正确。
但是,我得到的唯一输入是来自我的操纵杆的纯 -1.0、0.0 或 1.0,它确实在指定的 MotionRange
内。它从不返回中间值。
除此之外,我还担心批处理(来自文档):
为了效率,使用 ACTION_MOVE 的运动事件可以将单个对象内的多个运动样本批处理在一起。
这是否意味着我永远无法对我的操纵杆获得直接、即时的反馈?即便如此,我检查了历史值,但 MotionEvent#getHistorySize
为每个模拟输入返回 0。
(附带说明,按钮事件工作正常)
这是控制器、批处理、事件处理还是其他方面的问题?如果无法避免批处理,我可以设置一个单独的线程来连续收集这些信息吗?
为清楚起见,我使用的是通过蓝牙和 API 级别 30 连接的 Nintendo JoyCon (R)。