我知道最新版本的Android(Honeycomb和ICS)支持手柄和游戏手柄。
Guitar Hero(和Garage Band)控制器本质上是USB HID设备,对吗?
所以我的问题是: 在Android设备上是否可以接收来自Guitar Hero(或Rock Band)控制器的数据(按钮点击)? Android是否能将其理解为游戏手柄输入?
P.S. 我只需要在我的游戏中检测来自这些五个按钮的输入信号。
我知道最新版本的Android(Honeycomb和ICS)支持手柄和游戏手柄。
Guitar Hero(和Garage Band)控制器本质上是USB HID设备,对吗?
所以我的问题是: 在Android设备上是否可以接收来自Guitar Hero(或Rock Band)控制器的数据(按钮点击)? Android是否能将其理解为游戏手柄输入?
P.S. 我只需要在我的游戏中检测来自这些五个按钮的输入信号。
嘿,这是一个非常酷的想法。从这里开始:
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
使用了这个type
和endpointCount
,但车库乐队控制器很可能具有不同的值。
另外,检查一下run
方法,可以看到来回通信的示例。
免责声明:我不知道这是否有效。我也看过一些博客声称这是不能实现的。
我的猜测是它应该能够检测数据。即使在现有的Android设备上也可能实现这一点,但它不适用于Android市场。
要在非4.0设备上完成这个任务,您必须为USB端口提供另一种电源。通常可以使用廉价的USB集线器来泄漏电源。设备还必须被root。完成此操作后,您需要创建一个接口到设备shell以启动类似C的本地语言,超出您的Dalvik VM。使用您的C绑定到适当的套接字,您应该能够来回传输数据。您还可能需要编译内核模块以提供驱动程序支持。
就像我说的那样,这对于4.0以下的设备来说是一个完全的黑客行为。但是这是可能的。