¿Por qué este dispositivo específico no puede enumerarse por UsbManager.getDevicesList ()?
Como dice el título, estoy teniendo problemas para enumerar un dispositivo USB específico en un teléfono con capacidad USB USB usando UsbManager.getDeviceList (). No he tenido problemas para enumerar y comunicarme con otros dispositivos USB en este y otros teléfonos, pero este dispositivo USB específico no se puede encontrar. Tampoco se puede enumerar con aplicaciones de terceros como USB Device Info .
A continuación se muestran las propiedades USB enumeradas correctamente en un PC. Me he comunicado con el fabricante del dispositivo que ha confirmado que una firma externa certificó el dispositivo siguió la especificación USB 2.0. Originalmente, mi sospecha era que el dispositivo fue rechazado por Android porque omitió los siguientes campos: iManufacturer, iProduct e iSerialNumber, que fueron incluidos por otros dispositivos compatibles. Sin embargo, parece que estos campos no son necesarios después de revisar este extracto de la Sección 9.5 de la Especificación USB 2.0 :
- Cómo cargar mi aplicación de Eclipse a mi teléfono Android en lugar de AVD
- ¿Se pueden transferir datos a través de USB Host API a PC vía cable USB?
- USB debugging - Problema con la instalación de controladores para Epson Moverio
- No puedo conectar mi Nexus5 a OSx Yosemite
- Envía datos a través de USB desde la aplicación de Android a la PC
Cuando sea apropiado, los descriptores contienen referencias a descriptores de cadena que proporcionan información visualizable que describe un descriptor en forma legible por humanos. La inclusión de descriptores de cadena es opcional. Sin embargo, los campos de referencia dentro de los descriptores son obligatorios. Si un dispositivo no admite descriptores de cadena, los campos de referencia de cadena deben restablecerse a cero para indicar que no hay ningún descriptor de cadena disponible.
Mi pregunta, entonces, es lo que está haciendo que el UsbManager rechazar la enumeración de este dispositivo USB? Y, lo que es más importante, ¿hay algo que pueda hacer para forzar a Android a enumerar este dispositivo? Idealmente, estoy más interesado en una solución que no requiere acceso root, pero no es necesariamente un deal-breaker.
EDIT: Algún código de ejemplo.
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: he probado con algunos teléfonos más. He enumerado con éxito el dispositivo USB con los siguientes teléfonos:
- Nota 2
- LG-V400
Los siguientes dispositivos no pudieron enumerar el dispositivo:
- Nexus 5
- Galaxy S4, S5, S6
- LG G2, 4G LTE
EDIT 3: Aquí están los registros de la llamada adb shell dmesg
en un Nexus 5 después de conectar el dispositivo USB. Puede ver claramente en las líneas 4-16 que el teléfono no puede enumerar el dispositivo.
- Desarrollo de Android en IntelliJ IDEA hace que la computadora se congele
- Android: Comunicación USB Android <-> Dispositivo externo
- Problemas al intentar que la depuración USB funcione en Windows 7 (Android)
- ¿Qué sucede después de que DTR / RTS sea enviado a una placa Arduino basada en FTDI?
- Anulación inversa de Android o acceso a LAN o Internet mediante cable USB
- Ruta de audio desde Android Phone a PC a través de USB?
- ¿Es posible identificar el modo de comunicación USB mediante programación?
- Android Studio 2.0 No se detectaron dispositivos USB
Después de conectar el dispositivo USB a su teléfono Android, desconéctelo y conecte el teléfono a su computadora para que pueda usar el adb shell dmesg
para ver el registro del kernel. Si ves que el dispositivo aparece en el registro del kernel, el teléfono lo reconoce y no estoy seguro de por qué no es devuelto por UsbManager. Lo que sospecho es que no aparecerá en el registro del kernel o habrá un error allí. Esto probablemente significa que el dispositivo no es compatible con el controlador OTG del teléfono o no está recibiendo suficiente energía para funcionar correctamente.
No tengo una solución y ni siquiera puede tener una sugerencia útil, pero el error parece ser algo explicable:
#define EOVERFLOW 75 /* Value too large for defined data type */
Espero que esto conduzca a una explicación y, finalmente, una solución.
Kaamel
- Crear archivo PDF / Word (Doc) en la aplicación
- Android Studio – Gradle 1.5 – opción de la biblioteca