Come afferma il titolo, sto riscontrando dei problemi nell'enumerazione di un dispositivo USB specifico su un telefono Android USB compatibile con UsbManager.getDeviceList(). Non ho avuto problemi a elencare e comunicare con altri dispositivi USB su questo e altri telefoni, ma questo specifico dispositivo USB non può essere trovato. Inoltre, non può essere elencato con app di terze parti come USB Device Info.Perché questo dispositivo specifico non può essere enumerato da UsbManager.getDevicesList()?
Di seguito sono elencate correttamente le proprietà USB su un PC. Ho comunicato con il produttore del dispositivo che ha confermato che una società esterna ha certificato il dispositivo seguendo le specifiche USB 2.0. Originariamente, il mio sospetto era che il dispositivo fosse stato rifiutato da Android perché ometteva i seguenti campi: iManufacturer, iProduct e iSerialNumber, che erano inclusi da altri dispositivi compatibili. Tuttavia, sembra che questi campi non sono necessari dopo aver esaminato questo estratto dalla sezione 9.5 del USB 2.0 Spec:
Se del caso, i descrittori contengono riferimenti a descrittori di stringa che forniscono informazioni visualizzabili che descrivono un descrittore in forma leggibile. L'inclusione di descrittori di stringhe è facoltativa. Tuttavia, i campi di riferimento all'interno dei descrittori sono obbligatori. Se un dispositivo non supporta i descrittori di stringhe, i campi di riferimento stringa devono essere ripristinati a zero per indicare che non è disponibile alcun descrittore di stringhe.
La mia domanda, quindi, è ciò che sta causando l'UsbManager per rifiutare l'enumerazione di questo dispositivo USB? E, cosa più importante, c'è qualcosa che posso fare per forzare Android ad enumerare questo dispositivo? Idealmente, sono più interessato a una soluzione che non richieda l'accesso come root, ma non è necessariamente un deal-breaker.
EDIT: Alcuni codice di esempio.
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: ho provato con alcuni altri telefoni. Ho enumerato con successo il dispositivo USB con i seguenti telefoni:
- Nota 2
- LG-V400
I seguenti dispositivi non possono enumerare la periferica:
- Nexus 5
- Galaxy S4, S5, S6
- LG G2, 4G LTE
EDIT 3: Here are the logs di chiamare adb shell dmesg
su un Nexus 5 dopo aver collegato il dispositivo USB. È possibile vedere chiaramente sulle righe 4-16 che il telefono non riesce a enumerare il dispositivo.
Invia qualche codice per favore? – napkinsterror
Proprio fatto. È un caso molto semplice, quindi non sono sicuro di quanto sia utile. –
Puoi stampare i risultati? Hai aggiunto le autorizzazioni appropriate? – napkinsterror