6

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

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

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

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

有没有办法做到这一点?

4

1 回答 1

2

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

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

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

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

于 2012-07-30T09:18:13.253 回答