我知道最新版本的 Android(Honeycomb 和 ICS)支持游戏杆和游戏手柄。Guitar Hero(和 Garage Band)控制器本质上是 USB HID 设备,对吧?
所以我的问题是:是否可以从 Android 设备上的吉他英雄(或摇滚乐队)控制器接收数据(按钮点击)?Android会将其理解为游戏手柄输入吗?
PS我所需要的只是在我的游戏中检测来自塑料吉他品格上这五个按钮的输入。
我知道最新版本的 Android(Honeycomb 和 ICS)支持游戏杆和游戏手柄。Guitar Hero(和 Garage Band)控制器本质上是 USB HID 设备,对吧?
所以我的问题是:是否可以从 Android 设备上的吉他英雄(或摇滚乐队)控制器接收数据(按钮点击)?Android会将其理解为游戏手柄输入吗?
PS我所需要的只是在我的游戏中检测来自塑料吉他品格上这五个按钮的输入。
一个好的起点是查看 Frets On Fire 的 linux 源代码,它支持一些 Guitar Hero 控制器。
SVN:https ://fretsonfire.svn.sourceforge.net/svnroot/fretsonfire
看起来很难普遍支持来自不同平台的所有控制器。每个控制台都有自己的协议,但看起来在带有 PS3 控制器的 PC 上,JoyStick 到键盘仿真是可能的。第二个链接上有一个 PS3 控制器的配置文件可能会有所帮助,它适用于 JoyToKey(它不是开源的),但配置中的一些值可能会对您有所帮助。
嘿,这是一个非常酷的主意。从这里开始:
http://developer.android.com/guide/topics/usb/host.html
然后,查看此示例:
http://developer.android.com/resources/samples/USB/MissileLauncher/index.html
在该示例中,有一个名为setDevice(UsbDevice device)
如果我要实现这个,我会从项目的副本开始MissileLauncher
,并修改这个setDevice
方法。我会记录所有我能找到的关于 的信息,UsbDevice device
并尝试在setDevice
方法中尝试这些条件:
if (ep.getType() != UsbConstants.USB_ENDPOINT_XFER_INT) {
...
if (intf.getEndpointCount() != 1) {
虽然MissileLauncher
使用 thistype
和 this endpointCount
,但garageband 控制器很可能具有不同的值
还
查看run
方法以查看来回通信的示例
免责声明:我不知道这是否可行。我也看到博客说这不能做到。
我的猜测是它应该检测数据。这甚至可以在现有的 Android 设备上实现 - 但它对 Android Market 不友好。
要在非 4.0 设备上完成此操作,您必须为 USB 端口提供替代电源。通常这可以通过一个便宜的、漏电的 USB 集线器来完成。该设备还必须植根。完成后,您需要创建一个到设备外壳的接口,以在 Dalvik VM 之外启动像 C 这样的本地语言。使用您的 C 绑定到适当的套接字,您应该能够来回传输数据。您可能还需要编译内核模块以提供驱动程序支持。
就像我说的,这是对 4.0 以下设备的完整破解。但这是可能的。