第23章 HarmonyOs开发图解之 WLAN
HarmonyOS 学习系统 | 阶段四:专业精通期
学习目标
| 序号 | 能力 |
|---|---|
| 1 | 掌握 WLAN 基础信息查询(状态、扫描、连接详情) |
| 2 | 能够监听 WLAN 状态变化事件 |
| 3 | 了解 WLAN P2P 直连和不信任热点配置 |
核心图解

内容讲解
23.1 WLAN 概述
HarmonyOS 的 WLAN 模块提供了完整的 Wi-Fi 网络管理能力,包括基础功能(查询状态、扫描、连接信息)和高级功能(P2P 直连、热点配置)。
生活化类比:WLAN 就像"无线水管网络"
WLAN 热点就像"公共水龙头":想象一个小区的供水系统------路由器(AP)是水塔,通过无线管道(无线电波)把水(数据)送到每家每户。WLAN 的基础功能就是检查水管通不通(isWifiActive)、看看有哪些水塔(scan 获取扫描结果)、接上水管(isConnected 获取连接信息)。P2P 直连则像两户人家之间拉了一根临时水管,不需要水塔中转,直接互通。
23.2 WLAN 信息查询
java
WifiDevice wifiDevice = WifiDevice.getInstance(context);
// 查询 WLAN 状态
HiLog.info(TAG, "WLAN开启: " + wifiDevice.isWifiActive());
HiLog.info(TAG, "已连接: " + wifiDevice.isConnected());
// 发起扫描
wifiDevice.scan();
List<WifiScanInfo> scanInfos = wifiDevice.getScanInfoList();
for (WifiScanInfo info : scanInfos) {
HiLog.info(TAG, "SSID: " + info.getSsid()
+ ", 信号强度: " + info.getRssi()
+ ", 频段: " + info.getBand());
}
// 获取连接详情
WifiLinkedInfo linkedInfo = wifiDevice.getLinkedInfo();
if (linkedInfo != null) {
HiLog.info(TAG, "连接SSID: " + linkedInfo.getSsid());
HiLog.info(TAG, "BSSID: " + linkedInfo.getBssid());
}
// 获取 IP 地址
WifiIpInfo ipInfo = wifiDevice.getIpInfo();
HiLog.info(TAG, "IP地址: " + ipInfo.getIpAddress());
23.3 WLAN 事件通知
HarmonyOS 提供丰富的 WLAN 事件广播,可订阅监听网络状态变化:
| 事件 | 含义 |
|---|---|
usual.event.wifi.POWER_STATE |
WLAN 开关状态变化 |
usual.event.wifi.SCAN_FINISHED |
扫描完成 |
usual.event.wifi.RSSI_VALUE |
信号强度变化 |
usual.event.wifi.CONN_STATE |
连接状态变化 |
usual.event.wifi.p2p.STATE_CHANGE |
P2P 状态变化 |
23.4 信号强度计算
java
// 将 RSSI 值转换为信号格数
int signalLevel = WifiDevice.getSignalLevel(rssiValue, band);
// signalLevel: 0-4, 4 为满格
代码速查卡
| API | 功能 | 权限 |
|---|---|---|
WifiDevice.getInstance(context) |
获取 WLAN 管理对象 | 无 |
isWifiActive() |
查询 WLAN 开关状态 | GET_WIFI_INFO |
scan() |
发起 WLAN 扫描 | SET_WIFI_INFO + LOCATION |
getScanInfoList() |
获取扫描结果 | GET_WIFI_INFO + LOCATION |
getLinkedInfo() |
获取连接信息(SSID/BSSID/信号) | GET_WIFI_INFO |
getIpInfo() |
获取 IP 地址信息 | GET_WIFI_INFO |
addUntrustedConfig(config) |
添加不信任热点 | SET_WIFI_INFO |
getSignalLevel(rssi, band) |
计算信号格数 | GET_WIFI_INFO |
与 Android/iOS 对比
| 特性 | HarmonyOS | Android | iOS |
|---|---|---|---|
| WLAN 管理 | WifiDevice | WifiManager | NEHotspotNetwork |
| 扫描 | scan() | startScan() | NEHotspotHelper |
| 连接信息 | WifiLinkedInfo | WifiInfo | NEHotspotNetwork |
| 事件监听 | CommonEvent 广播 | BroadcastReceiver | NotificationCenter |
| P2P | WifiP2PManager | WifiP2pManager | MultipeerConnectivity |
⚠️ 踩坑回忆录
P2P 连不上?
我尝试同时开启 WLAN 热点和 P2P 连接,结果 P2P 一直报错。后来查文档才知道------P2P 和 AP 模式在同一时刻互斥!要使用 P2P 必须先关闭热点。
WLAN 权限也要精确区分:GET_WIFI_INFO 只是读取信息,SET_WIFI_INFO 才能修改网络状态,两者权限等级不同。申请了读取权限就去调用 scan(),结果直接抛 SecurityException。
必做实操任务
| 序号 | 任务 | 难度 |
|---|---|---|
| 1 | 实现 WLAN 状态查询和扫描列表展示 | 中 |
| 2 | 实现信号强度的实时监控(通过 RSSI 事件) | 中 |
| 3 | 监听 WLAN 连接状态变化并更新 UI | 中 |
| 4 | 实现不信任热点的添加功能 | 高 |
| 5 | 实现 WLAN P2P 设备发现和连接 | 高 |
学习检查清单
- 能使用 WifiDevice 查询 WLAN 状态和连接信息
- 能发起 WLAN 扫描并获取扫描结果
- 能将 RSSI 值转换为信号格数
- 能通过 CommonEvent 订阅 WLAN 状态变化事件
- 知道 GET_WIFI_INFO 和 SET_WIFI_INFO 的区别
- 知道 P2P 和 AP 模式互斥
- 能获取当前连接的 SSID、BSSID 和 IP 地址
- 理解不信任热点配置的使用场景
进阶方向
- 实现一个 Wi-Fi 信号检测仪 App
- 学习 WLAN 热点(SoftAP)模式的配置和使用
- 探索 Wi-Fi 和蓝牙的共存策略
能获取当前连接的 SSID、BSSID 和 IP 地址 - 理解不信任热点配置的使用场景
进阶方向
- 实现一个 Wi-Fi 信号检测仪 App
- 学习 WLAN 热点(SoftAP)模式的配置和使用
- 探索 Wi-Fi 和蓝牙的共存策略