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

Mik*_*tiz 10 usb android android-usb

正如标题所述,我在使用UsbManager.getDeviceList()在具有USB功能的Android手机上枚举特定USB设备时遇到了麻烦.我在此手机和其他手机上枚举和与其他USB设备通信时没有遇到任何问题,但找不到这个特定的USB设备.它也无法使用第三方应用程序(如USB设备信息)进行枚举.

以下是在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.
Run Code Online (Sandbox Code Playgroud)

编辑2:我已经测试了更多手机.我已成功使用以下手机枚举USB设备:

  • 笔记2
  • LG-V400

以下设备无法枚举设备:

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

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

Rei*_*ant 2

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