监听设备网络状态 HarmonyOS 鸿蒙Next场景化代码
监听设备网络状态 HarmonyOS 鸿蒙Next场景化代码
<markdown _ngcontent-yjo-c147="" class="markdownPreContainer">
监听设备网络状态
介绍
本示例实现以下三种功能。
- 监听当前网络连接状态。
- 监听网络类型(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接口获取当前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
}
});
});
}
工程结构&模块类型
entry/src/main/ets/
|---entryability
| |---EntryAbility.ets
|---pages
| |---Index.ets // 首页
参考资料
无
</markdown>更多关于监听设备网络状态 HarmonyOS 鸿蒙Next场景化代码的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于监听设备网络状态 HarmonyOS 鸿蒙Next场景化代码的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙系统中,监听设备网络状态可以通过订阅系统提供的网络变化事件来实现。以下是一个基于ArkUI(eTS,即Enhanced TypeScript)的场景化代码示例,用于监听设备网络状态变化:
import network from '@ohos.network';
@Entry
@Component
struct NetworkStatusListener {
@State networkStatus: string = "Unknown";
onNetworkStatusChanged(event: any) {
if (event.isConnected) {
this.networkStatus = "Connected";
} else {
this.networkStatus = "Disconnected";
}
}
aboutToAppear() {
network.on('networkStatusChange', this.onNetworkStatusChanged.bind(this));
}
aboutToDisappear() {
network.off('networkStatusChange', this.onNetworkStatusChanged.bind(this));
}
build() {
Column() {
Text("Network Status: " + this.networkStatus)
}.padding(20)
}
}
上述代码中,network.on
方法用于订阅网络状态变化事件,aboutToAppear
生命周期钩子中注册监听器,aboutToDisappear
生命周期钩子中取消监听。当网络状态发生变化时,onNetworkStatusChanged
方法会被调用,并更新networkStatus
状态,从而在界面上显示最新的网络状态。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html