HarmonyOS鸿蒙Next中实现设备网络监听示例代码

HarmonyOS鸿蒙Next中实现设备网络监听示例代码

介绍

本示例实现以下三种功能:

  1. 利用 NetConnection 监听当前网络连接状态。
  2. 监听网络类型(wifi、蜂窝网络)。
  3. 判断蜂窝网络类型(3G\4G\5G)和信号强度。

实现设备网络监听源码地址

效果预览

图片名称

使用说明

  1. 进入应用默认网络开关开,网络类型为“未知”。
  2. 插入SIM卡,断开wifi,关闭数据流量,网络开关关闭,网络类型显示为“网络未开启”。
  3. 连接wifi,关闭数据流量,网络开关打开,网络类型显示为“Wi-Fi网络”。
  4. 断开wifi,打开数据流量,网络开关打开,网络类型显示为“蜂窝网络”,显示SIM卡槽,蜂窝网络类型(3G\4G\5G)以及信号等级强度。

实现思路

监听网络连接状态

利用 NetConnection 可获取当前设备的网络连接状态。使用 register 接口注册订阅事件,设备从无网络到有网络会触发 netAvailable 事件、netCapabilitiesChange 事件和 netConnectionPropertiesChange 事件;设备从有网络到无网络状态会触发 netLost 事件;设备从 WiFi 到蜂窝会触发 netLost 事件(WiFi 丢失)之后触发 netAvailable 事件(蜂窝可用)。核心代码如下,源码参考

Index.ets

onNetCapabilitiesChange() {
    // 先使用 register 接口注册订阅事件
    this.netCon.register((error: BusinessError) => {
      if (error) {
        console.log(this.tag, `register failed ${JSON.stringify(error)}`);
      } else {
        console.log(this.tag, `register success`);
      }
    });
    // 订阅网络可用事件。调用 register 后,才能接收到此事件通知
    this.netCon.on('netAvailable', (data: connection.NetHandle) => {
      console.log(this.tag, 'netAvailable' + JSON.stringify(data));
      this.netAvailable = true;
      connection.getNetCapabilities(data, (error: BusinessError, data: connection.NetCapabilities) => {
        if (error) {
          console.log(this.tag, 'getNetCapabilities ' + JSON.stringify(error));
        }
        console.log(this.tag, 'getNetCapabilities ' + JSON.stringify(data));
        // 解析网络类型
        if (data && data.bearerTypes) {
          this.netBearType = data.bearerTypes[0];
          if (data.bearerTypes[0] == 0) {
            this.getSignalInformation()
          }
        }
      })
    });
    // 订阅网络能力变化事件
    this.netCon.on('netCapabilitiesChange', (data: connection.NetCapabilityInfo) => {
      console.log(this.tag, 'netCapabilitiesChange' + JSON.stringify(data));
    });
    // 订阅网络可用事件
    this.netCon.on('netConnectionPropertiesChange', (data: connection.NetConnectionPropertyInfo) => {
      console.log(this.tag, 'netConnectionPropertiesChange' + JSON.stringify(data));
    });
    // 订阅网络丢失事件
    this.netCon.on('netLost', (data: connection.NetHandle) => {
      console.log(this.tag, 'netLost' + JSON.stringify(data));
      this.netAvailable = false;
    });
    // 订阅网络不可用事件。调用 register 后,才能接收到此事件通知
    this.netCon.on('netUnavailable', () => {
      console.log(this.tag, 'netUnavailable');
      this.netAvailable = false;
    });
  }
  netBearTypeNameMapping(netBearType: number) {
    if (!this.netAvailable) {
      this.netBearType = -1;
      return '网络未开启'
    }
    return this.netBearHashMap.get(netBearType) ? this.netBearHashMap.get(netBearType) : '未知'
  }
}

监听网络类型(wifi、蜂窝网络)

NetBearType 接口可获取当前网络类型并用不同的值表示,蜂窝网络值为 0,Wi-Fi 网络值为 1。将网络类型与对应的值存储在 HashMap 中,通过查询键值对的方式判断当前网络类型并显示。

判断蜂窝网络类型(3G\4G\5G)和信号强度

利用 [@ohos.telephony.radio](https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-radio-V5) 接口获取当前 SIM 卡所在卡槽以及网络信号强度等级,通过 NetworkType 获取蜂窝网络类型并用不同的值表示。将蜂窝网络类型与对应的值存储在 HashMap 中,通过查询键值对的方式判断当前蜂窝网络类型并显示。核心代码如下,源码参考

Index.ets

getSignalInformation() {
    // 获取蜂窝网络的 SIM 卡槽
    radio.getPrimarySlotId((err: BusinessError, data: number) => {
      if (err) {
        console.error(this.tag, `getPrimarySlotId failed, callback: err->${JSON.stringify(err)}`);
        return;
      }
      console.log(this.tag, `getPrimarySlotId success, callback: data->${JSON.stringify(data)}`);
      this.slotId = data;
      radio.getSignalInformation(data, (err: BusinessError, data: Array<radio.SignalInformation>) => {
        if (err) {
          console.error(this.tag, `getSignalInformation failed, callback: err->${JSON.stringify(err)}`);
          return;
        }
        console.log(this.tag, `getSignalInformation success, callback: data->${JSON.stringify(data)}`);
        if (data) {
          this.signalTypeName = this.signalTypeHashMap.get(data[0].signalType.toString())
          this.signalLevelName = data[0].signalLevel
        }
      });
    });
  }

更多关于HarmonyOS鸿蒙Next中实现设备网络监听示例代码的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在HarmonyOS鸿蒙Next中,实现设备网络监听可以通过使用NetManagerNetStatusCallback来完成。以下是一个简单的示例代码,展示了如何监听设备的网络状态变化:

import net from '@ohos.net.connection';

// 创建NetStatusCallback对象
let netStatusCallback = new net.NetStatusCallback();

// 定义网络状态变化的回调函数
netStatusCallback.onNetAvailable = (data) => {
    console.log('Network is available: ' + data.netInfo.netCapabilities);
};

netStatusCallback.onNetLost = (data) => {
    console.log('Network is lost: ' + data.netInfo.netCapabilities);
};

netStatusCallback.onNetCapabilitiesChange = (data) => {
    console.log('Network capabilities changed: ' + data.netInfo.netCapabilities);
};

netStatusCallback.onNetConnectionPropertiesChange = (data) => {
    console.log('Network connection properties changed: ' + data.netInfo.netCapabilities);
};

// 注册网络状态监听
net.on('netStatusChange', netStatusCallback);

// 取消网络状态监听
// net.off('netStatusChange', netStatusCallback);

在这个示例中,NetStatusCallback对象用于监听网络状态的变化,包括网络可用、网络丢失、网络能力变化和网络连接属性变化。通过net.on方法注册监听,可以实时获取网络状态的变化信息。需要取消监听时,可以使用net.off方法。

此代码适用于HarmonyOS鸿蒙Next系统,帮助开发者实现设备网络状态的监听功能。

更多关于HarmonyOS鸿蒙Next中实现设备网络监听示例代码的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙Next)中,可以通过NetManager模块来监听设备网络状态的变化。以下是一个简单的示例代码,展示如何监听网络连接状态的变化:

import ohos.net.NetManager;
import ohos.net.NetStatusCallback;
import ohos.eventhandler.EventRunner;

public class NetworkListenerExample {

    public static void main(String[] args) {
        // 获取NetManager实例
        NetManager netManager = NetManager.getInstance(null);

        // 创建NetStatusCallback实例
        NetStatusCallback callback = new NetStatusCallback() {
            @Override
            public void onAvailable(boolean isAvailable) {
                // 网络可用性变化时触发
                System.out.println("Network available: " + isAvailable);
            }

            @Override
            public void onCapabilitiesChanged(NetCapabilities netCapabilities) {
                // 网络能力变化时触发
                System.out.println("Network capabilities changed: " + netCapabilities);
            }
        };

        // 注册网络状态监听器
        netManager.registerNetStatusCallback(callback, EventRunner.current());
    }
}

代码说明:

  1. NetManager:用于管理网络连接和监听网络状态。
  2. NetStatusCallback:用于监听网络状态变化的回调接口,可以根据需要重写onAvailableonCapabilitiesChanged方法。
  3. registerNetStatusCallback:注册网络状态监听器,EventRunner.current()用于指定事件运行的线程。

注意事项:

  • 在实际应用中,记得在适当的时机取消注册监听器,以避免内存泄漏。
  • 需要在config.json中添加相应的权限声明,如ohos.permission.GET_NETWORK_INFO
回到顶部