2015-03-13 17 views
8

mam jakiś kod, który wygląda jakNullPointerException od UsbManager

UsbManager usbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE); 
usbManager.getDeviceList(); 

Kiedy używać Androida 5.0 emulatora, otrzymuję tę katastrofę:

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) 
    ... 

Rozumiem, że oficjalny emulator Android ma USB wsparcie, ale spodziewałbym się zobaczyć pustą listę urządzeń USB, a nie awarię.

Szczytowałem trochę w kodzie Androida, a mapa serwisów ServiceManager nie zawierała pozycji dla "usb". Nic w stosie systemu Android 21 nie obsługuje wartości null zwróconej przez ServiceManager.

Kod działa prawidłowo na emulowanych urządzeniach 4.4, ale ulega awarii na urządzeniach 5.0. Architektura CPU wydaje się nie mieć znaczenia; Próbowałem ARM i x86.

Działa również dobrze na wszystkich urządzeniach Genymotion, które wypróbowałem, ale muszę to zrobić działając na hostach CentOS CI, a generowanie Genymotion na CentOS wydaje się wymagać uciążliwych zmian.

Wszelkie pomysły na naprawę lub obejście problemu? W ostateczności mogłem złapać NPE UsbManager, ale byłoby to bardzo złe, ponieważ korzystam również z biblioteki stron trzecich, która współdziała z UsbManager.

+1

to: https://bugs.chromium.org/p/chromium/issues/detail?id=578875 sugeruje, że - getDevicesList nie działa na emulatorach ze względu na brak wsparcia usb przez emulatory. – Tom

Odpowiedz

0

https://developer.android.com/reference/android/content/Context.html#getSystemService(java.lang.String)

RETURN Object The service or null if the name does not exist.

Zgodnie API, wdrożenie nie jest zobowiązany do zwróconego non wartości null.

Praca: prosta.

UsbManager usbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE); 
if (usbManager == null) { 
    Log.w("MyApp","USB Not supported"); 
    return; 
} 

// Normal route 
usbManager.getDeviceList(); 

(mam również w obliczu tego samego problemu na emulatorze, jak opisano)

+0

OP pyta o wyjątek w getDeviceList - nie zwraca wartości zerowej przez getSystemService. – Tom