10

正如标题所述,我在使用 UsbManager.getDeviceList() 枚举支持 USB 的 Android 手机上的特定 USB 设备时遇到了麻烦。我在这台手机和其他手机上枚举和与其他 USB 设备通信没有问题,但是找不到这个特定的 USB 设备。它也不能用USB Device Info等 3rd 方应用程序枚举。

下面是在 PC 上正确枚举的 USB 属性。我已与设备制造商进行了沟通,他们已确认外部公司认证该设备符合 USB 2.0 规范。最初,我怀疑该设备被 Android 拒绝,因为它省略了以下字段:iManufacturer、iProduct 和 iSerialNumber,其他兼容设备包含这些字段。但是,在查看了USB 2.0 规范第 9.5 节的摘录后,这些字段似乎不是必需的:

在适当的情况下,描述符包含对字符串描述符的引用,这些字符串描述符以人类可读的形式提供描述描述符的可显示信息。字符串描述符的包含是可选的。但是,描述符中的引用字段是强制性的。如果设备不支持字符串描述符,则必须将字符串引用字段重置为零以指示没有可用的字符串描述符。

那么,我的问题是,是什么导致 UsbManager 拒绝枚举此 USB 设备?而且,更重要的是,我能做些什么来强制 Android 枚举这个设备吗?理想情况下,我对不需要 root 访问权限的解决方案最感兴趣,但它不一定会破坏交易。

USB 属性


编辑:一些示例代码。

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 设备:

  • 笔记2
  • LG-V400

以下设备无法枚举该设备:

  • 连结 5
  • 银河 S4、S5、S6
  • LG G2、4G LTE

编辑 3:这是插入 USB 设备后调用Nexus 5的日志。adb shell dmesg您可以在第 4-16 行清楚地看到电话无法枚举设备。

4

2 回答 2

2

将 USB 设备连接到您的 Android 手机后,断开它并将手机连接到您的计算机,以便您可以使用adb shell dmesg查看内核日志。如果您看到设备出现在内核日志中,那么手机正在识别它,我不确定为什么 UsbManager 没有返回它。我怀疑它不会出现在内核日志中,或者那里会出现错误。这可能意味着该设备与手机的 OTG 控制器不兼容,或者没有获得足够的电量来正常运行。

于 2015-11-13T00:52:40.550 回答
1

我没有解决方案,甚至可能没有有用的提示,但该错误似乎可以解释:

#define EOVERFLOW 75 /* Value too large for defined data type */
于 2015-11-14T22:30:38.687 回答