HarmonyOS 鸿蒙Next中教你如何全局监听网络状态变化

HarmonyOS 鸿蒙Next中教你如何全局监听网络状态变化

背景

快应用提供了网络状态接口network,能够监听当前用户手机的网络情况,是否有网,网络类型是wifi还是移动网络。开发者可以根据网络类型和自身应用耗流量的情况,给出不同的界面设计。如果在每个页面中都去监听网络状态,重复代码多,还容易遗漏,有没有一种方案可以做到全局监听呢?

通过在快应用app.ux中调用网络接口,每个页面使用watch监听获取当前网络状态即可满足你的要求。

监听网络状态变化的实现方案

配置权限

{
        "name": "ohos.permission.GET_NETWORK_INFO"  //监听网络状态的权限
}

HarmonyOS 鸿蒙Next中监听网络状态变化的完整代码

import { connection } from '@kit.NetworkKit';
import { BusinessError } from '@kit.BasicServicesKit';
@Builder
export function NetworkStatePageBuilder(){
  NetworkStatePage()
}
@Component
struct NetworkStatePage {
  pathStack=new NavPathStack()
  // 创建网络连接对象
  private netCon: connection.NetConnection = connection.createNetConnection();

  aboutToAppear(): void {
    this.setupNetworkListeners();
  }

  setupNetworkListeners() {
    // 注册网络状态监听
    this.netCon.register((error: BusinessError) => {
      if (error) {
        console.error('网络状态监听注册失败:', JSON.stringify(error));
      } else {
        console.log('网络状态监听注册成功');
      }
    });

    // 监听网络可用事件
    this.netCon.on('netAvailable', (data: connection.NetHandle) => {
      console.log('网络已连接');
      this.checkNetworkType(data);
    });

    // 监听网络断开事件
    this.netCon.on('netLost', () => {
      console.log('网络已断开 - 无互联网连接');
    });

    // 监听网络不可用事件
    this.netCon.on('netUnavailable', () => {
      console.log('网络不可用');
    });
  }

  // 检查当前网络类型
  checkNetworkType(netHandle: connection.NetHandle) {
    connection.getNetCapabilities(netHandle, (error: BusinessError, data: connection.NetCapabilities) => {
      if (error) {
        console.error('获取网络能力失败:', JSON.stringify(error));
        return;
      }

      if (data && data.bearerTypes) {
        const networkType = this.getNetworkTypeName(data.bearerTypes[0]);
        console.log('当前网络类型:', networkType);
      }
    });
  }

  // 获取网络类型名称
  getNetworkTypeName(type: number): string {
    switch(type) {
      case 0: return '蜂窝网络';
      case 1: return 'Wi-Fi';
      case 2: return '以太网';
      default: return '未知网络';
    }
  }

  build() {
   NavDestination(){
     Column() {
       Text('网络状态监控')
         .fontSize(20)
         .margin(10);
       Text('请在控制台查看网络状态更新')
         .fontSize(16)
         .margin(10);
     }
     .width('100%')
     .height('100%')
     .justifyContent(FlexAlign.Center)
     .alignItems(HorizontalAlign.Center)
   }.title("监听网络状态")
  }
}


更多关于HarmonyOS 鸿蒙Next中教你如何全局监听网络状态变化的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS 鸿蒙Next中教你如何全局监听网络状态变化的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,可以通过NetManager类全局监听网络状态变化。首先,使用NetManager.createNetManager()创建网络管理实例,然后通过on()方法监听networkStatusChange事件。示例代码如下:

import net from '@ohos.net';

let netManager = net.createNetManager();
netManager.on('networkStatusChange', (data) => {
  console.log('Network status changed:', data);
});

这样,当网络状态发生变化时,回调函数会被触发,开发者可以在回调中处理相关逻辑。

回到顶部