与iconia a500和android 3.2的usb主机模式:没有设备

时间:2011-10-23 10:27:04

标签: android usb

我正在尝试与usb设备通信,使用acer iconia a500升级到android 3.2(内核2.6.36.3+,没有root,我只是使用了常规更新功能)。 简而言之,当我获得UsbManager之后,getDeviceList返回一个空映射。来自谷歌的adbtest样本也是如此:

mManager = (UsbManager)getSystemService(Context.USB_SERVICE);
// check for existing devices
for (UsbDevice device :  mManager.getDeviceList().values()) {
    // I get nothing here, the values() list is empty

我尝试了几种设备(各种usb固态硬盘,硬盘,鼠标,garmin手表等)。没有。一些设备(磁盘,鼠标)确实被操作系统识别(它们工作:我看到文件系统,鼠标工作正常等),但它们没有在API级别得到反映。

谷歌搜索,有些人说鼠标和键盘不会被枚举,但磁盘会,但他们使用3.1,而我使用3.2。我也没有得到磁盘,或者我插入的任何其他东西。

上面的代码应枚举所有设备。无论如何,我还尝试了google示例中记录的intent + xml文件方法。依然没有。

清单似乎没问题,正如我所说,直接来自sdk的adbtest样本显示了同样的问题。

鉴于API的缺乏,我真的不知道下一步该尝试什么。有没有人在带有android 3.2的iconia a500上成功使用主机模式?

编辑:我的意思是在API级别“使用”。正如我所说,“标准”设备在操作系统级别得到识别并且可以正常工作,但是通过API无法看到。最后我需要在主机模式下与非标准设备进行通信,所以我真的需要通过API来实现它。

编辑2:我不打算根植我的设备,因为我的应用程序(如果我设法写它:-)如果需要生根则没用。

谢谢!

  • VIC

2 个答案:

答案 0 :(得分:2)

确保您的意图过滤器没有隐藏设备。

http://developer.android.com/guide/topics/usb/host.html

“通常,如果要过滤特定设备并使用类,子类和协议,如果要过滤一组USB设备(如大容量存储设备或数码相机),请使用供应商和产品ID。您可以指定所有这些属性。指定没有属性匹配每个USB设备,因此只有在您的应用程序需要它时才执行此操作:“

告诉我它是否适合你。

答案 1 :(得分:0)

试试这段代码,

mUsbManager = (UsbManager) getSystemService(USB_SERVICE);
HashMap<String, UsbDevice> devicelist = mUsbManager.getDeviceList();
Iterator<UsbDevice> deviceIterator = devicelist.values().iterator();

if (deviceIterator.hasNext()) {
    while(deviceIterator.hasNext()) {
        mUsbDeviceX = deviceIterator.next();
        if (mUsbDeviceX != null) {
            Log.v(Log_Tag, "ProdID: " +mUsbDeviceX.getProductId());
            Log.v(Log_Tag, "VendID: " +mUsbDeviceX.getVendorId());
        }
    }
} else {
    Log.v(Log_Tag, "No Usb Devices Attached");
}

如果它不起作用,请在这里向我们展示dmesg / logcat的输出。