首页 > 解决方案 > Android P WifiRttManager 始终为空

问题描述

我最近在我的智能手机上安装了这个 RTT-Manager-App,主要是为了了解我的设备和可用的接入点是否支持 IEEE 802.11mc 标准。

但是,一旦我启动该应用程序,它就会崩溃。这是由 WifiRttManager 实例上的 NullPointerException 引起的。然后我设置了一个小应用程序,它的 MainActivity 中只包含此代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    WifiRttManager rttManager = (WifiRttManager) getBaseContext().getSystemService(Context.WIFI_RTT_RANGING_SERVICE);
    rttManager.isAvailable();
}

这会导致相同的错误:

Unable to start activity ComponentInfo{...MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.net.wifi.rtt.WifiRttManager.isAvailable()' on a null object reference

WifiRttManager 需要 Android P 以及支持 802.11mc 的 CPU(如之前提到的 RTT-Manager-App 的作者所说的 Qualcomm Snapdragon 820 CPU)。

我首先尝试在崩溃的 OnePlus X(Android P 和 Qualcomm Snapdragon 801)上运行该应用程序,所以我认为 CPU 不支持 802.11mc。

但是,我随后也尝试在 OnePlus 6T(Android P 和 Qualcomm Snapdragon 845)上运行它,但同样崩溃了。

getSystemService(Context.WIFI_RTT_RANGING_SERVICE)总是返回 null的还有什么原因?

标签: javaandroidnullpointerexception

解决方案


看来您的手机需要启用以支持 wiirtt。根据谷歌文档,https://source.android.com/devices/tech/connect/wifi-rtt

要实现 Wi-Fi RTT,您必须同时提供框架和 HAL/固件支持:

框架:

AOSP 代码启用 Wi-Fi RTT:需要功能标志 Wi-Fi RTT (IEEE 802.11mc) HAL 支持(这意味着固件支持)

要实现此功能,请实现 Wi-Fi HIDL 并启用功能标志:

在位于 device// 的 device.mk 中,修改 PRODUCT_COPY_FILES 环境变量以包含对 Wi-Fi RTT 功能的支持:

PRODUCT_COPY_FILES += frameworks/native/data/etc/android.hardware.wifi.rtt.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.rtt.xml

否则,此功能所需的一切都包含在 AOSP 中。


推荐阅读