Как говорится в заголовке, у меня возникают проблемы с перечислением определенного USB-устройства на телефоне с поддержкой USB с помощью UsbManager.getDeviceList(). У меня не было проблем перечислять и общаться с другими USB-устройствами на этом и других телефонах, но это конкретное USB-устройство не может быть найдено. Он также не может быть перечислен с помощью сторонних приложений, таких как Информация об устройстве USB.
Ниже перечислены свойства USB, правильно перечисленные на ПК. Я общался с производителем устройства, который подтвердил, что внешняя фирма сертифицировала устройство, следуя спецификации USB 2.0. Первоначально я подозревал, что устройство было отклонено Android, потому что оно опустило следующие поля: iManufacturer, iProduct и iSerialNumber, которые были включены другими совместимыми устройствами. Однако кажется, что эти поля не нужны после просмотра этой выдержки из раздела 9.5 Спецификация USB 2.0:
В соответствующих случаях дескрипторы содержат ссылки на строковые дескрипторы, которые предоставляют отображаемую информацию, описывающую дескриптор в удобочитаемой форме. Включение дескрипторов строк необязательно. Однако ссылочные поля в дескрипторах являются обязательными. Если устройство не поддерживает строковые дескрипторы, то строковые ссылочные поля должны быть reset равными нулю, чтобы указать, что нет дескриптора строки.
Итак, возникает вопрос, почему UsbManager отклоняет перечисление этого USB-устройства? И что еще более важно, есть ли что-нибудь, что я могу сделать, чтобы заставить Android перечислить это устройство? В идеале меня больше всего интересует решение, которое не требует доступа root, но оно не обязательно является нарушителем транзакций.
EDIT: некоторый пример кода.
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.
EDIT 2: Я тестировал еще несколько телефонов. Я успешно перечислил USB-устройство со следующими телефонами:
- Примечание 2
- LG-V400
Следующие устройства не могли перечислить устройство:
- Nexus 5
- Galaxy S4, S5, S6
- LG G2, 4G LTE
ИЗМЕНИТЬ 3: Ниже приведены журналы, вызывающие adb shell dmesg
на Nexus 5 после подключения устройства USB. Вы можете четко видеть на строках 4-16, что телефон не может перечислить устройство.