回复
基于connection的网络连接管理能力
HarmonyOS官方账号
发布于 2024-10-9 09:00
浏览
0收藏
场景描述
网络连接管理提供管理网络一些基础能力,包括获取默认激活的数据网络、获取所有激活数据网络列表、开启关闭飞行模式、获取网络能力信息等功能。
场景一:应用内部获取当前使用网络类型为wifi / 移动数据及当前网络可连接状态做业务处理。
场景二:应用侧需要知道用户当前连接网络状态并作对应的业务处理,如网络断开返回弹框提示、应用中是否按缓存数据展示图片等。
场景三:获取当前连接网卡链路地址、DNS地址等信息判断处理用户连接网络位置等应用侧能力。
方案描述
场景一:
应用内部获取当前使用网络类型为wifi / 移动数据 及当前网络可连接状态做业务处理。
效果图
核心代码
connection.getDefaultNet().then((netHandle: connection.NetHandle) => {
connection.getNetCapabilities(netHandle).then((data: connection.NetCapabilities) => {
console.log(JSON.stringify(data));
})
});
场景二:
应用侧需要知道用户当前连接网络状态并作对应的业务处理,如网络断开返回弹框提示、应用中是否按缓存数据展示图片等。
效果图
以wifi切换为例监听成功返回日志,可参考打印日志如图。
方案
调用connection模块能力,使用前需要调用register开启监听,监听结束后需要调用unregister关闭当前监听请求,可参考:connection.netConnect。
netLost(网络丢失) 与 netUnavailable(网络不可用)区别,可参考常见问题Q6。
核心代码
//网络状态监听
netCon : connection.NetConnection = connection.createNetConnection();
connTest(){
//开启监听事件
this.netCon.register((error: BusinessError) => {
console.log(JSON.stringify(error));
});
//监听网络是否可用
this.netCon.on('netAvailable', (data) => {
console.log("1---- net status netAvailable" + JSON.stringify(data))
})
//网络切换监听
this.netCon.on('netCapabilitiesChange', (data: connection.NetCapabilityInfo) => {
console.log(JSON.stringify(data));
});
//网络丢失()
this.netCon.on("netLost",(data) => {
console.log("1---- net lost" + JSON.stringify(data))
})
//网络不可用()
this.netCon.on('netUnavailable', (data) => {
console.log("1---- net status netUnavailable" + JSON.stringify(data))
})
//取消监听
this.netCon.unregister((error: BusinessError) => {
console.log(JSON.stringify(error));
});
}
场景三:
获取当前连接网卡链路地址、DNS地址等信息判断处理用户连接网络位置等应用侧能力。
效果图
方案
步骤:
- 如需要获取蜂窝网络信息,创建时需要添加关注。
- 调用getConnectionProperties能力获取连接信息。
核心代码
//1、 指定蜂窝网络类型获取
// 关注蜂窝网络,需要传入相关网络特征,
let netConnectionCellular = netConn.createNetConnection({
netCapabilities: {
bearerTypes: [connection.NetBearType.BEARER_CELLULAR]
}
});
try {
const ipAddresses: string[] = []; // 使用数组来收集IP地址
// 获取所有网络句柄
const allNets = connection.getAllNets();
for (const net of allNets) { // 使用for...of循环
// 获取当前网络句柄的能力信息
const netCap = connection.getConnectionProperties(net);
if (!netCap.interfaceName.includes('wlan') && Array.isArray(netCap.dnses)) {
// 确保netCap.dnses是一个数组,然后提取IP地址并添加到数组中
const dnsAddresses = netCap.dnses.map(NetAddress => NetAddress.address);
ipAddresses.push(...dnsAddresses);
}
}
// 将IP地址数组转换为逗号分隔的字符串并返回
return ipAddresses.join(',').toString();
} catch (error) {
// 打印错误并抛出,或进行其他错误处理
console.error('获取IP列表时出错:', error);
// 抛出包含原始错误信息的错误
throw new Error(`获取IP列表时出错: ${error.message}`);
}
-------
//2、默认网络获取
// 关注默认网络
let netConn = connection.createNetConnection();
connection.getDefaultNet().then((netHandle: connection.NetHandle) => {
connection.getConnectionProperties(netHandle).then((data: connection.ConnectionProperties) => {
console.log(JSON.stringify(data));
})
});
分类
赞
收藏
回复
相关推荐