- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
如标题所述,我在使用 UsbManager.getDeviceList() 枚举支持 USB 的 Android 手机上的特定 USB 设备时遇到了问题。我在本手机和其他手机上枚举和与其他 USB 设备通信没有遇到任何问题,但是找不到这个特定的 USB 设备。它也不能用第 3 方应用程序枚举,例如 USB Device Info .
以下是在 PC 上正确枚举的 USB 属性。我已经与设备制造商进行了沟通,他们已确认有一家外部公司认证了该设备符合 USB 2.0 规范。最初,我怀疑该设备被 Android 拒绝,因为它省略了以下字段:iManufacturer、iProduct 和 iSerialNumber,这些字段被其他兼容设备包含。但是,在查看 USB 2.0 Spec 的第 9.5 节的摘录后,这些字段似乎不是必需的。 :
Where appropriate, descriptors contain references to string descriptors that provide displayable information describing a descriptor in human-readable form. The inclusion of string descriptors is optional. However, the reference fields within descriptors are mandatory. If a device does not support string descriptors, string reference fields must be reset to zero to indicate no string descriptor is available.
那么我的问题是,是什么导致 UsbManager 拒绝枚举此 USB 设备?而且,更重要的是,我能做些什么来强制 Android 枚举这个设备吗?理想情况下,我对不需要根访问权限的解决方案最感兴趣,但它不一定会破坏交易。
编辑:一些示例代码。
UsbManager usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
HashMap<String, UsbDevice> deviceList = usbManager.getDeviceList();
// When I plug in this USB device, deviceList is empty.
// Other devices are discoverable, however.
编辑 2:我测试了更多手机。我已经成功枚举了以下手机的 USB 设备:
以下设备无法枚举设备:
编辑 3:Here are the logs插入 USB 设备后在 Nexus 5 上调用 adb shell dmesg
。您可以在第 4-16 行清楚地看到手机无法枚举设备。
最佳答案
将 USB 设备连接到您的 Android 手机后,断开它并将手机连接到您的计算机,这样您就可以使用 adb shell dmesg
查看内核日志。如果您看到该设备出现在内核日志中,那么手机正在识别它,我不确定为什么 UsbManager 没有返回它。我怀疑它不会出现在内核日志中,或者那里会出现错误。这可能意味着该设备与手机的 OTG Controller 不兼容,或者没有获得足够的电量来正常运行。
关于android - 为什么 UsbManager.getDevicesList() 无法枚举此特定设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33578132/
我是一名优秀的程序员,十分优秀!