网络管理中网络详情、域名解析、网络状态监听等功能模拟

功能场景描述

网络管理中网络详情、域名解析、网络状态监听等功能模拟-鸿蒙开发者社区

网络管理中网络详情、域名解析、网络状态监听等功能模拟-鸿蒙开发者社区

网络管理中网络详情、域名解析、网络状态监听等功能模拟-鸿蒙开发者社区

网络管理中网络详情、域名解析、网络状态监听等功能模拟-鸿蒙开发者社区

HarmonyOS
2024-05-28 20:26:40
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
gdycp

使用OS相关的核心API

3、核心代码详解

//判断是否有网,并获取网络ID 
isNetworkAccess() { 
connection.hasDefaultNet().then((result) => { 
if (result) { 
this.netHandle = connection.getDefaultNetSync() 
this.NetworkId = "网络ID为: " + JSON.stringify(this.netHandle) 
} 
}) 
}
//获取网络信息详情 
getNetworkMessage() { 
if (this.netHandle) { 
connection.getNetCapabilities(this.netHandle, (err, netCap) => { 
let netType = netCap.bearerTypes; 
for (let i = 0;i < netType.length; i++) { 
if (netType[i] === 0) { 
this.NetMessage = "网络类型为:蜂窝网络\n" 
} else if (netType[i] === 1) { 
this.NetMessage = "网络类型为:wifi\n" 
} else { 
this.NetMessage = "网络类型为:其他以太网\n" 
} 
} 
this.NetMessage += "networkCap为:" + JSON.stringify(netCap.networkCap) + "\n"; 
}) 
} 
}
//域名解析 
parseHostName(hostName: string) { 
this.ip = ""; 
connection.getAddressesByName(hostName).then((data) => { 
for (let i = 0;i < data.length; i++) { 
this.ip += data[i].address + "\n"; 
} 
}).catch((err) => { 
console.error("dns parse error: " + JSON.stringify(err)) 
this.ip = "域名解析失败!" 
}) 
}
//监听网络状态变化 
useNetworkRegister() { 
this.netCon = connection.createNetConnection(); 
this.NetStateMessage += "开启网络监听!\n"; 
this.netCon.register((err) => { 
if (!err) { 
console.info("register network success"); 
} 
}) 
this.netCon.on("netAvailable", (netHandle) => { 
console.info("network is available"); 
this.NetStateMessage += "有网络可用,ID为: " + netHandle.netId + "\n"; 
}) 
this.netCon.on("netBlockStatusChange", (data) => { 
console.info("network block,netId is :" + data.netHandle.netId); 
this.NetStateMessage += "网络堵塞,ID为: " + data.netHandle.netId + "\n"; 
}) 
this.netCon.on("netCapabilitiesChange", (data) => { 
console.info("netCapabilitiesChange: " + JSON.stringify(data)); 
this.NetStateMessage += "网络能力变化:ID为" + data.netHandle.netId + "。网络能力信息为: " + JSON.stringify(data.netCap) + "\n"; 
}) 
this.netCon.on("netConnectionPropertiesChange", (data) => { 
console.info("netConnectionPropertiesChange: " + JSON.stringify(data)); 
this.NetStateMessage += "网络连接信息变化:ID为" + data.netHandle.netId + "。网络连接信息为: " + JSON.stringify(data.connectionProperties) + "\n"; 
}) 
}
//取消网络状态变化监听 
unUseNetworkRegister() { 
if (this.netCon) { 
this.netCon.unregister(() => { 
console.info("network register is off") 
this.NetStateMessage += "关闭网络监听!\n"; 
}) 
} else { 
console.info("network unregister failed") 
this.NetStateMessage += "关闭网络监听失败!\n"; 
} 
}

4、实现效果


分享
微博
QQ
微信
回复
2024-05-29 21:26:54
相关问题
webview如何实现网络请求拦截功能
751浏览 • 1回复 待解决
熄屏状态网络请求失败
766浏览 • 1回复 待解决
NEXT版本中如何获取设备的网络状态
765浏览 • 1回复 待解决
网络连接管理connection中this指向问题
260浏览 • 1回复 待解决
关于网络状态的疑问
331浏览 • 1回复 待解决
动态加载网络字体文件
280浏览 • 1回复 待解决
网络地址建立socket连接
269浏览 • 1回复 待解决
获取netHandle网络连接信息
241浏览 • 1回复 待解决
网络请求抓包以及日志
288浏览 • 1回复 待解决