目录

Wi-Fi始终连接,如何感知Wi-Fi本身从无网络到有网络的状态

问题现象

手机连接到未认证的Wi-Fi,认证后无法感知到认证成功,即网络连接成功。

背景知识

解决方案

先在module.json5文件中配置网络权限ohos.permission.INTERNET和允许应用获取数据网络信息ohos.permission.GET_NETWORK_INFO。

完整示例参考如下:

import { connection } from '@kit.NetworkKit';
import { BusinessError } from '@kit.BasicServicesKit';

let netCon: connection.NetConnection = connection.createNetConnection();

@Entry
@Component
struct Connection {
  aboutToAppear(): void {
    // 先使用register接口注册订阅事件
    netCon.register((error: BusinessError) => {
      console.error(JSON.stringify(error));
    });
  }

  build() {
    Column() {
      Text('开始检测网络状态')
        .onClick(() => {
          // 订阅网络丢失事件
          netCon.on('netLost', (data: connection.NetHandle) => {
            console.info(`网络丢失: ${data.netId}`);
          });
          // 订阅网络能力变化事件
          netCon.on('netCapabilitiesChange', (data: connection.NetCapabilityInfo) => {
            console.info(`订阅网络能力变化: ${data.netCap.bearerTypes}`);
          });

          // 订阅网络可用事件
          netCon.on('netAvailable', (data: connection.NetHandle) => {
            console.info(`网络可用: ${data.netId}`);
          });
        })
    }
  }
}

常见FAQ

Q:开发预下载的功能,需要判断当前app的网络请求为闲时进行下载,是否有相关API可以进行判断?

A:可以使用connection模块的on('netBlockStatusChange')监听事件判断当前网络的阻塞状态。