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 代码
- 启用感知:需要同时设置功能标记和构建标记
- 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 地址必须:
- 在每次启用或重新启用 Wi-Fi 感知时随机化。
在启用 Wi-Fi 感知后,必须按照
NanConfigRequest.macAddressRandomizationIntervalSec
参数配置的固定时间间隔随机化 MAC 地址。默认情况下,框架将此时间间隔配置为 30 分钟。
暂停和恢复
在 Android 14 及更高版本中,Wi-Fi 感知支持特权应用暂停和恢复活跃发现会话(包括与这些会话关联的所有数据路径)的功能。支持此功能可让设备更快地恢复发现会话并降低功耗,因为可以暂停发现会话。
如果设备支持此暂停和恢复功能,当特权应用暂停发现会话时,固件会暂停 Wi-Fi Aware 会话。当发现会话处于暂停状态时,设备不会为该会话发送或接收任何帧,包括该会话中的任何活动 NDP。如果所有发现会话都已暂停,则设备不会发送或接收任何 Wi-Fi Aware 帧。
当特权应用恢复已暂停的发现会话时,框架会将该会话恢复到之前的状态,包括所有关联的 NDP 会话。恢复已暂停的发现会话比启动 Wi-Fi Aware 并创建新的发现会话更快。
为了支持暂停和恢复发现会话的功能,设备制造商必须提供 HAL 和固件支持。有关详细信息,请参阅 IWifiNanIface.java
。
设备制造商可以使用带外通信(例如,BLE)来同步多个设备上的暂停和恢复操作。
验证
Android 提供了一组单元测试、兼容性测试套件 (CTS) 测试和 CTS 验证程序 测试,以验证 Wi-Fi Aware 功能。Wi-Fi Aware 也可以使用 供应商测试套件 (VTS) 进行测试。
单元测试
Wi-Fi Aware 软件包测试使用以下方式执行
服务测试
atest com.android.server.wifi.aware
管理器测试
atest android.net.wifi.aware
兼容性测试套件 (CTS) 测试
使用 CTS 测试来验证 Wi-Fi Aware 功能。CTS 会检测该功能何时启用,并自动包含相关的测试。
CTS 测试可以使用以下方式触发
atest SingleDeviceTest
CTS 验证程序测试
CTS 验证程序测试使用两个设备(一个测试设备和一个已知良好的设备)来验证 Wi-Fi Aware 的行为。要运行测试,请打开 CTS 验证程序并导航到名为“Wi-Fi Aware 测试”的部分。