正如标题所述,我在使用UsbManager.getDeviceList()在UsbManager.getDeviceList上枚举特定的USB设备时遇到了困难。我在这个和其他手机上枚举和与其他USB设备通信没有任何问题,但是这个特定的USB设备是找不到的。它也不能通过第三方应用程序(如USB设备信息 )来列举。
下面是在PC上正确枚举的USB属性。我与设备制造商进行了沟通,后者证实了一家外部公司认证该设备符合USB2.0规范。最初,我怀疑该设备被Android拒绝,因为它忽略了以下字段: iManufacturer、iProduct和iSerialNumber,这些都是其他兼容设备所包含的。但是,在回顾了USB2.0规范第9.5节的摘录后,这些字段似乎是不必要的
在适当的情况下,描述符包含对字符串描述符的引用,这些引用提供了以人类可读的形式描述描述符的可显示信息。字符串描述符的包含是可选的。但是,描述符中的引用字段是强制性的。如果设备不支持字符串描述符,则必须将字符串引用字段重置为零,以指示没有可用的字符串描述符。
那么,我的问题是,是什么导致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:这是原木从调用adb shell dmesg在Nexus 5后插入USB设备。您可以在第4-16行清楚地看到,电话无法枚举设备。
发布于 2015-11-13 00:52:40
在将USB设备连接到您的Android手机之后,断开它并将其连接到您的计算机上,以便您可以使用adb shell dmesg查看内核日志。如果您看到设备显示在内核日志中,那么电话就会识别它,我不知道为什么UsbManager不返回它。我怀疑它不会出现在内核日志中,否则会出现错误。这可能意味着该设备与手机的OTG控制器不兼容,或者没有获得足够的电源来正常工作。
发布于 2015-11-14 22:30:38
我没有解决方案,甚至可能没有一个有用的提示,但这个错误似乎是可以解释的:
#define EOVERFLOW 75 /* Value too large for defined data type */https://stackoverflow.com/questions/33578132
复制相似问题