HarmonyOS鸿蒙Next中实现设备网络监听示例代码
HarmonyOS鸿蒙Next中实现设备网络监听示例代码
介绍
本示例实现以下三种功能:
- 利用 NetConnection 监听当前网络连接状态。
- 监听网络类型(wifi、蜂窝网络)。
- 判断蜂窝网络类型(3G\4G\5G)和信号强度。
效果预览

使用说明
- 进入应用默认网络开关开,网络类型为“未知”。
- 插入SIM卡,断开wifi,关闭数据流量,网络开关关闭,网络类型显示为“网络未开启”。
- 连接wifi,关闭数据流量,网络开关打开,网络类型显示为“Wi-Fi网络”。
- 断开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
在HarmonyOS鸿蒙Next中,实现设备网络监听可以通过使用NetManager和NetStatusCallback来完成。以下是一个简单的示例代码,展示了如何监听设备的网络状态变化:
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());
}
}
代码说明:
- NetManager:用于管理网络连接和监听网络状态。
- NetStatusCallback:用于监听网络状态变化的回调接口,可以根据需要重写
onAvailable和onCapabilitiesChanged方法。 - registerNetStatusCallback:注册网络状态监听器,
EventRunner.current()用于指定事件运行的线程。
注意事项:
- 在实际应用中,记得在适当的时机取消注册监听器,以避免内存泄漏。
- 需要在
config.json中添加相应的权限声明,如ohos.permission.GET_NETWORK_INFO。

