gpt4 book ai didi

android - 来自 UsbManager 的 NullPointerException

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:43:29 26 4
gpt4 key购买 nike

我有一些代码看起来像

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

当我使用 Android 5.0 模拟器时,我遇到了这个崩溃:

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

我知道官方 Android 模拟器不支持 USB,但我希望看到一个空的 USB 设备列表而不是崩溃。

我对 Android 代码进行了一些研究,ServiceManager 的服务映射没有“usb” 的条目。 Android 21 堆栈中似乎没有任何内容可以处理 ServiceManager 返回的空值。

该代码在模拟 4.4 设备上运行良好,但在 5.0 设备上崩溃。 CPU 架构似乎没有什么不同;我尝试了 ARM 和 x86。

它在我试过的所有 Genymotion 设备上也能正常工作,但我需要让它在 CentOS CI 主机上工作,而让 Genymotion 在 CentOS 上运行似乎需要侵入式更改。

有任何修复或解决方法的想法吗?作为最后的手段,我可​​以捕获 UsbManager 的 NPE,但这会很糟糕,因为我还使用了与 UsbManager 交互的第三方库。

最佳答案

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

RETURN Object 服务,如果名称不存在则为 null。

根据 API,实现没有义务返回非 null 值。

解决方法:简单。

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

// Normal route
usbManager.getDeviceList();

(我在 Emulator 上也遇到过和你描述的一样的问题)

关于android - 来自 UsbManager 的 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29023753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com