首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么UsbManager.getDevicesList()不能枚举这个特定的设备?

为什么UsbManager.getDevicesList()不能枚举这个特定的设备?
EN

Stack Overflow用户
提问于 2015-11-07 01:30:08
回答 2查看 884关注 0票数 10

正如标题所述,我在使用UsbManager.getDeviceList()在UsbManager.getDeviceList上枚举特定的USB设备时遇到了困难。我在这个和其他手机上枚举和与其他USB设备通信没有任何问题,但是这个特定的USB设备是找不到的。它也不能通过第三方应用程序(如USB设备信息 )来列举。

下面是在PC上正确枚举的USB属性。我与设备制造商进行了沟通,后者证实了一家外部公司认证该设备符合USB2.0规范。最初,我怀疑该设备被Android拒绝,因为它忽略了以下字段: iManufacturer、iProduct和iSerialNumber,这些都是其他兼容设备所包含的。但是,在回顾了USB2.0规范第9.5节的摘录后,这些字段似乎是不必要的

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

那么,我的问题是,是什么导致UsbManager拒绝这个USB设备的枚举呢?更重要的是,我能做些什么来迫使Android来枚举这个设备吗?理想情况下,我最感兴趣的是一个不需要根访问的解决方案,但它不一定是一个交易的破坏者。

编辑:一些示例代码。

代码语言:javascript
复制
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-V 400

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

  • Nexus 5
  • 银河S4,S5,S6
  • LG G2,4G LTE

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

EN

回答 2

Stack Overflow用户

发布于 2015-11-13 00:52:40

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

票数 2
EN

Stack Overflow用户

发布于 2015-11-14 22:30:38

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

代码语言:javascript
复制
#define EOVERFLOW 75 /* Value too large for defined data type */
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33578132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档