【问题标题】:usb host mode with iconia a500 and android 3.2: no devices带有 iconia a500 和 android 3.2 的 USB 主机模式:无设备
【发布时间】:2011-10-23 10:27:03
【问题描述】:

我正在尝试使用升级到 android 3.2 的 acer iconia a500 与 USB 设备通信(内核 2.6.36.3+,未植根,我只是使用了定期更新功能)。 简而言之,我得到 UsbManager 后,getDeviceList 返回一个空映射。来自 google 的 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。我也没有得到磁盘,或者我插入的任何其他东西。

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

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

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

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

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

谢谢!

  • 维克

【问题讨论】:

  • 我在 Iconia 3.2 上使用了键盘、鼠标和外部 NTFS 硬盘驱动器。
  • 是的,正如我所说,我也是。它们自己工作,但不会在 API 级别被枚举,所以虽然操作系统可以看到它们,但我不能(所以我不能与非标准设备通信)。我会澄清我的问题,谢谢!
  • 您或许可以联系“Drive Mount”的开发人员,了解他是如何工作的。申请在这里:market.android.com/details?id=au.dach.drivemount
  • 我已经安装了这个应用程序,但是它需要设备被植根。这对我的应用程序来说是不可能的,并且不应该是 USB 主机所必需的(但可能需要安装驱动器)。我会进一步澄清我的问题,谢谢。

标签: android usb


【解决方案1】:

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

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

“一般来说,如果要过滤特定设备,请使用供应商和产品 ID,如果要过滤一组 USB 设备(例如大容量存储设备或数码相机),请使用类、子类和协议。您可以不指定或全部指定这些属性。指定没有匹配每个 USB 设备的属性,因此只有在您的应用程序需要时才这样做:"

告诉我它是否适合你。

【讨论】:

  • 我刚买了一台 A500。您拥有的代码可以工作并识别其他平板电脑......但您是对的,它无法识别我的键盘或鼠标。
  • 我的 A500 识别(使用 API):打印机、USB 存储设备、其他平板电脑。它无法识别:鼠标/键盘(即使没有过滤器)。奇怪的是(正如您所指出的)鼠标和键盘在 A500 上工作......它们只是没有出现在 API 的“附加 USB 设备”列表中
【解决方案2】:

试试这个代码,

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 的输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 2014-05-22
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    • 2020-09-28
    相关资源
    最近更新 更多