Ho qualche codice che assomigliaNullPointerException da UsbManager
UsbManager usbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE);
usbManager.getDeviceList();
Quando uso un Android 5.0 emulatore, ottengo questo incidente:
java.lang.NullPointerException: Attempt to invoke interface method 'void android.hardware.usb.IUsbManager.getDeviceList(android.os.Bundle)' on a null object reference
at android.hardware.usb.UsbManager.getDeviceList(UsbManager.java:243)
...
Capisco che l'emulatore ufficiale di Android non ha USB supporto, ma mi aspetto di vedere una lista vuota di dispositivi USB piuttosto che un crash.
I peaked nel codice Android un po ', e la mappa dei servizi ServiceManager
non aveva una voce per "usb"
. Nulla nello stack di Android 21 sembra gestire il valore nullo restituito da ServiceManager
.
Il codice funziona correttamente su dispositivi emulati 4.4, ma si blocca su dispositivi 5.0. L'architettura della CPU non sembra fare la differenza; Ho provato ARM e x86.
Funziona bene anche su tutti i dispositivi Genymotion che ho provato, ma ho bisogno di farlo funzionare su host CentOS CI, e far funzionare Genymotion su CentOS sembra richiedere modifiche invadenti.
Qualche idea per una correzione o una soluzione alternativa? Come ultima risorsa potrei prendere l'NPE di UsbManager
, ma sarebbe piuttosto brutto in quanto uso anche una libreria di terze parti che interagisce con UsbManager
.
questo: https://bugs.chromium.org/p/chromium/issues/detail?id=578875 suggerisce che - getDevicesList non funziona sugli emulatori a causa della mancanza di supporto per gli emulatori. – Tom