Как говорится в заголовке, у меня возникают проблемы с перечислением определенного USB-устройства на телефоне с поддержкой USB с использованием UsbManager.getDeviceList(). У меня не было проблем перечислять и общаться с другими USB-устройствами на этом и других телефонах, но это конкретное USB-устройство не может быть найдено. Он также не может быть перечислен с помощью сторонних приложений, таких как USB Device Info.Почему это конкретное устройство не может быть перечислено UsbManager.getDevicesList()?
Ниже перечислены свойства USB, правильно перечисленные на ПК. Я общался с производителем устройства, который подтвердил, что внешняя фирма сертифицировала устройство, следуя спецификации USB 2.0. Первоначально я подозревал, что устройство было отклонено Android, потому что оно опустило следующие поля: iManufacturer, iProduct и iSerialNumber, которые были включены другими совместимыми устройствами. Однако, похоже, эти поля не нужны после рассмотрения этого отрывка из раздела 9.5 USB 2.0 Spec:
В случае необходимости, дескрипторы содержат ссылки на строковые дескрипторы, которые предоставляют отображаемую информацию, описывающую дескриптор в виде читабельной. Включение дескрипторов строк необязательно. Однако ссылочные поля в дескрипторах являются обязательными. Если устройство не поддерживает строковые дескрипторы, то строковые ссылочные поля должны быть сброшены до нуля, чтобы указать, что дескриптор строки недоступен.
Таким образом, возникает вопрос, почему 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: Here are the logs от вызова adb shell dmesg
на Nexus 5 после подключения устройства USB. Вы можете четко видеть на строках 4-16, что телефон не может перечислить устройство.
Опубликовать код, пожалуйста? – napkinsterror
Просто сделал. Это очень простой случай, поэтому я не уверен, насколько он полезен. –
Можете ли вы распечатать результаты? Вы добавили соответствующие разрешения? – napkinsterror