Android:枚举游戏手柄上的按钮

Dav*_*ven 5 android input-devices gamepad-api

我有一个可以连接游戏手柄的Android设备(它是一个完全标准的XBox 360控制器,但我也需要支持其他品种).游戏手柄显示为带有一些模拟轴和一些按钮的InputDevice.

我需要能够查询Android以找出游戏手柄支持的按钮.有谁知道如何做到这一点?

我知道系统有这个信息,因为如果我编写一个打开的命令行应用程序/dev/input/event...并使用EVIOCGBITioctl 查询按钮,我会从内核中获得一个很好的支持按钮列表.但我无法从Android应用程序执行此操作,因为我无权直接访问输入设备.

看起来应该可以获取InputDevice的KeyCharacterMap对象并进行查询; 但看起来Android已将默认的QWERTY键盘键映射附加到游戏手柄,而不是构建一个实际匹配游戏手柄支持的键盘.这将很高兴地告诉我游戏手柄有一个Q键,它没有,并且它没有BUTTON_X键,它所做的,并且我正在接收关键事件.所以这没有帮助.

有没有办法做到这一点?

Dav*_*ven 2

我还没有找到办法,但我找到了一个可怕的解决方法。

如果你打电话KeyCharacterMap.deviceHasKey(keycode),我可以询问Android系统上的输入设备是否支持指定的键码通过迭代游戏手柄上可能出现的所有按钮(有用的是,它们都被称为KeyEvent.KEYCODE_BUTTON_something),我可以发现任何连接的游戏手柄必须至少支持其中一些按钮。

这不是一个很好的解决方案 --- 如果我同时连接了 Xbox 360 控制器和 Wiimote,那么我无法弄清楚 Xbox 控制器没有按钮 1 或 2,而 Wiimote 也没有例如,X 或 Y。但至少这是一个开始。

如果有人有更好的想法,请提出一些...

  • 看起来他们最终在 API 级别 19 (4.4) 中使用 InputDevice.hasKeys 添加了这个:http://developer.android.com/reference/android/view/InputDevice.html#hasKeys%28int...%29 (2认同)