通过 Android 8.0 中新增的 Wi-Fi 感知功能,支持设备可以直接使用 Wi-Fi 感知协议发现其他设备、与其他设备互连,以及将覆盖范围扩展到其他设备(Android 9 中新增的功能),而无需连接到互联网或移动网络。此功能是基于 Wi-Fi 联盟 (WFA) Wi-Fi 感知规范(2.0 版、3.0 版、3.1 版和 4.0 版)构建的,它支持在断开网络的情况下,在可信设备与应用之间轻松共享高吞吐量数据。
示例和源代码
如需使用此功能,设备制造商应实现 Wi-Fi 供应商 HAL。在 Android 14 及更高版本中,供应商 HAL 接口使用 AIDL 进行定义。对于 Android 13 及更低版本,供应商 HAL 接口使用 HIDL 进行定义。
使用 Wi-Fi 界面来使用 Wi-Fi 感知功能。 根据实现的是哪种接口,可以是:
- AIDL:
hardware/interfaces/wifi/aidl
- HIDL:
hardware/interfaces/wifi/1.2
或更高版本
您可以参考旧版 Wi-Fi HAL 来了解它与 AIDL 和 HIDL 接口之间的关系: hardware/libhardware_legacy/+/main/include/hardware_legacy/wifi_nan.h。
实现
设备制造商需要提供框架和 HAL/固件支持:
- 框架:
- AOSP 代码
- 启用感知功能:需要功能标志和 build 标志
- Wi-Fi 感知 (NAN) HAL 支持(意味着固件支持)
为实现此功能,设备制造商需采用 Wi-Fi 接口,另外还要启用两个功能标志:
在位于
device/<oem>/<device>
的BoardConfig.mk
或BoardConfig-common.mk
中,添加以下标志:WIFI_HIDL_FEATURE_AWARE := true
在位于
device/<oem>/<device>
的device.mk
中,修改PRODUCT_COPY_FILES
环境变量,以便支持 Wi-Fi 感知功能:PRODUCT_COPY_FILES += frameworks/native/data/etc/android.hardware.wifi.aware.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.aware.xml
Wi-Fi 感知功能包括使用 IEEE 802.11mc 协议(又称为往返时间 (RTT))将覆盖范围扩展到对等设备。Wi-Fi 感知的这一子功能取决于支持 Wi-Fi RTT 功能的设备,即它要求设备支持 Wi-Fi 感知和 Wi-Fi RTT。如需了解详情,请参阅 Wi-Fi RTT。
除此以外,实现此功能所需的所有代码都包含在 AOSP 中。
如果指定了 WIFI_HAL_INTERFACE_COMBINATIONS
标志,则忽略 WIFI_HIDL_FEATURE_AWARE
标志。如需了解详情,请参阅 Wi-Fi 多接口并发。
随机分配 MAC 地址
Android 要求随机分配 Wi-Fi 感知发现 (NMI) 和数据接口 (NDP) 的 MAC 地址,而且随机分配的 MAC 地址不应与设备的真实 MAC 地址相同。MAC 地址必须满足以下条件:
- 每当启用或重新启用 Wi-Fi 感知时进行随机分配。
Wi-Fi 感知功能启用后,必须按照由
NanConfigRequest.macAddressRandomizationIntervalSec
参数配置的有规律的间隔随机分配 MAC 地址。框架将时间间隔默认配置为 30 分钟。
暂停和恢复
在 Android 14 及更高版本中,Wi-Fi 感知支持特权应用暂停和恢复活跃的发现会话(包括与这些会话关联的所有数据路径)。支持此功能可让设备更快地恢复发现会话,而且功耗更低,因为发现会话可能会暂停。
如果设备支持这种暂停和恢复功能,固件会在特权应用暂停发现会话时挂起 Wi-Fi 感知会话。当发现会话处于暂停状态时,设备不会传输或接收该会话的任何帧,包括该会话中的任何活跃 NDP。如果所有发现会话均已暂停,则设备不会传输或接收任何 Wi-Fi 感知帧。
当特权应用恢复已暂停的发现会话时,框架会将会话返回到之前的状态,包括所有关联的 NDP 会话。恢复已暂停的发现会话比启动 Wi-Fi 感知和创建新的发现会话更快。
如需支持暂停和恢复发现会话的功能,设备制造商必须提供 HAL 和固件支持。如需了解详情,请参阅 IWifiNanIface.java
。
设备制造商可以使用带外通信(例如 BLE)在多个设备上同步挂起和恢复功能。
验证
Android 提供了一组单元测试、兼容性测试套件 (CTS) 测试和 CTS 验证程序测试,以验证 Wi-Fi 直连功能。您也可以使用供应商测试套件 (VTS) 来测试 Wi-Fi 感知功能。
单元测试
Wi-Fi 感知软件包测试:
服务测试:
atest com.android.server.wifi.aware
Manager 测试:
atest android.net.wifi.aware
兼容性测试套件 (CTS) 测试
使用 CTS 测试来验证 Wi-Fi 感知功能。CTS 会检测何时启用了这项功能,并会自动包含相关测试。
可以使用以下方法触发 CTS 测试:
atest SingleDeviceTest
CTS 验证程序测试
CTS 验证程序测试使用以下两种设备验证 Wi-Fi 感知行为:测试设备和已知良好的设备。如需运行测试,请打开 CTS 验证程序并转到“Wi-Fi 感知测试”部分。