【问题标题】:UsbManager.getDeviceList() returns emptyUsbManager.getDeviceList() 返回空
【发布时间】:2013-04-07 01:52:22
【问题描述】:

我想通过编写以下代码来使用UsbManager API:

在活动代码中:

        UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);

        HashMap<String, UsbDevice> deviceList = manager.getDeviceList();

        Log.d(TAG, "size =" + deviceList.size());

在清单中:

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="17" />

    <permission android:name="android.hardware.usb.host" >

</permission>

<uses-feature android:name="android.hardware.usb.host" android:required="true" />

我还关注了this question,查看了我的 Galaxy SII 9100G。它确实有/system/etc/permissions/android.hardware.usb.host.xml 和正确的权限。

manager.getDeviceList() 总是返回零,当我尝试使用闪存驱动程序和鼠标时。

谁能给我任何建议?

【问题讨论】:

    标签: android usb


    【解决方案1】:

    我在运行 Android Pie 的华为 Mate 20 Pro 上遇到过这个问题。相同的程序可在 Android 5 或 7 设备上完美运行。有一些证据表明这是一个 Android Pie 问题: https://issuetracker.google.com/issues/121435921

    【讨论】:

      【解决方案2】:

      您的问题没有统一的答案。这在很大程度上取决于您的设备。模拟器根本不支持 USB 主机,有些设备需要 root 才能做到,有些设备开箱即可支持 USB 主机。

      编辑

      我最近完成了自己对设备 TF-MID1007G 问题的调查。可能这对以后的人有帮助。有一个很棒的应用程序可以诊断设备的 USB 主机能力 - USB Host Diagnostic(非常感谢作者,你真的拯救了我的一天)。此应用程序显示有关设备的 USB 主机支持的判断,在我的情况下,它是内核支持的 USB 主机,但仅限于第三方应用程序。幸运的是,这个应用程序还可以(仅在有根设备上)修复您的设备系统以添加与 USB 主机一起使用的功能。即使在重置设备后,此修复程序仍然存在。在此修复后,我的应用程序可以枚举 USB 主机设备、请求权限等,如标准 android API 中所述。在此设备上启用普通 USB 主机支持的简短操作列表

      • 具有VRoot或百度Root的root设备(我用的是最后一个,因为我附近没有任何窗户)
      • 安装USB Host Diagnostic
      • 开始诊断,失败后请求root权限并确认修复系统,同意
      • 修复后,确保 VERDICT 部分包含第 3 方应用 - 完整
      • 毕竟我重置了我的设备以删除 root(这通常很危险,而且百度 Root 总是要求安装一些膨胀软件)

      现在此设备可以与 USB 设备一起使用了。

      【讨论】:

        【解决方案3】:

        您可能正在尝试通过 android 模拟器运行,但是.....根据模拟器的 Android 规格:http://developer.android.com/tools/devices/emulator.html#limitations

        模拟器的功能限制包括:

        No support for USB connections
        

        所以,只有在真机上才能测试 UsbManager

        【讨论】:

          【解决方案4】:

          这段代码对我来说很好用。尽管您的代码看起来很相似,但您可以重新检查。

            UsbManager usbManager = (UsbManager) getSystemService(USB_SERVICE);
            HashMap<String, UsbDevice> map = usbManager.getDeviceList();
            Iterator<UsbDevice> it = map.values().iterator();
          
            while(it.hasNext()) {
              UsbDevice device = it.next();
              // use device info
            }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-12-23
            • 2021-07-07
            • 2013-09-30
            • 2021-08-23
            • 2018-05-21
            • 2016-01-01
            • 2020-11-05
            • 1970-01-01
            相关资源
            最近更新 更多