我有一个可以连接游戏板的Android设备(这是一个完全标准的XBox360控制器,但我也需要支持其他品种)。游戏板显示为带有一些模拟轴和一些按钮的输入设备。
我需要能够查询Android,以了解游戏板支持哪些按钮。有人知道怎么做吗?
我知道系统有这些信息,因为如果我编写一个命令行应用程序,打开/dev/input/event...
并使用EVIOCGBIT
ioctl查询按钮,我会从内核中获得一个很好的受支持按钮列表。但我不能从安卓应用程序中做到这一点,因为我没有直接访问输入设备的权限。
看起来应该可以获取InputDevice的KeyCharacterMap对象并查询它;但看起来安卓系统在游戏板上附加了默认的QWERTY键盘键映射,而不是构建一个真正匹配游戏板支持的键映射。这会很高兴地告诉我,游戏板有一个Q键,但它没有,它没有BUTTON_X键,它有,我正在接收关键事件。所以这无济于事。
有办法做到这一点吗?
我还没有想出办法,但我找到了一个可怕的解决方法。
如果您调用KeyCharacterMap.deviceHasKey(keycode)
,我可以询问Android系统上的任何输入设备是否支持指定的密钥码。通过迭代游戏板上可能出现的所有按钮(有用的是,它们都被称为KeyEvent.KEYCODE_BUTTON_something
),我可以发现任何连接的游戏板都必须至少支持其中的一些按钮。
这不是一个很好的解决方案——例如,如果我同时连接了一个XBox 360控制器和一个Wiimote,那么我无法计算出XBox控制器没有按钮1或2,Wiimote没有X或Y。但至少这是一个开始。
如果有人有更好的想法,请提出一些。。。