ich einen Code haben, die Nullpointer von UsbManager
UsbManager usbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE);
usbManager.getDeviceList();
wie
aussieht, wenn ich ein Android 5.0-Emulator verwenden, erhalte ich diesen Absturz: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)
...
Ich verstehe, dass die offizielle Android-Emulator kein USB hat Unterstützung, aber ich würde erwarten, eine leere Liste von USB-Geräten statt einen Absturz zu sehen.
Ich erreichte in der Android-Code ein wenig, und ServiceManager
Karte der Dienstleistungen hatte keinen Eintrag für "usb"
. Nichts in dem Android 21-Stapel scheint mit dem Nullwert umzugehen, der von ServiceManager
zurückgegeben wird.
Der Code funktioniert auf emulierten 4.4 Geräten einwandfrei, stürzt aber auf 5.0 Geräten ab. CPU-Architektur scheint keinen Unterschied zu machen; Ich habe versucht, ARM und x86.
Es funktioniert auch gut auf allen Genymotion-Geräten, die ich ausprobiert habe, aber ich muss dies auf CentOS CI-Hosts arbeiten, und Genymotion auf CentOS laufen zu lassen scheint intrusive Änderungen zu erfordern.
Irgendwelche Ideen für eine Lösung oder einen Workaround? Als letztes Mittel konnte ich UsbManager
's NPE fangen, aber es würde ziemlich schlecht sein, weil ich auch eine dritte Parteibibliothek verwende, die mit UsbManager
interagiert.
Dies: https://bugs.chromium.org/p/chromium/issues/detail?id=578875 schlägt vor, dass - getDevicesList funktioniert nicht auf Emulatoren, da die USB-Unterstützung der Emulatoren fehlt. – Tom