java - 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的还有什么原因?
解决方案
看来您的手机需要启用以支持 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 中。
推荐阅读
- rest - Sharepoint API URL 混淆
- c - 为什么 printf 中的 \n 不打印字符数组的值或旧值?
- python - 读取的 CSV 没有行
- r - 如何在 Shiny 应用程序中对两个变量使用 lapply?
- ipad - Visual Studio for Mac / iPad 设备 - 等待调试器连接
- ssl - 配置文件中的 webpack4 webpack-dev-server ssl
- java - 在多模块化项目中查看解析器配置
- mysql - 选择其中 1 个属性完全不同的所有行两次。(MySQL)
- xamarin - Prism 中的 MVVM 条件返回导航
- c# - 窗口身份验证在 IIS 服务器上不起作用