鸿蒙next开发实战:网络连接管理能力-connection

652 篇文章 4 订阅
647 篇文章 7 订阅

场景描述

网络连接管理提供管理网络一些基础能力,包括获取默认激活的数据网络、获取所有激活数据网络列表、开启关闭飞行模式、获取网络能力信息等功能。

场景一:应用内部获取当前使用网络类型为wifi / 移动数据 及当前网络可连接状态做业务处理

场景二:应用侧需要知道用户当前连接网络状态并作对应的业务处理,如网络断开返回弹框提示、应用中是否按缓存数据展示图片等

场景三:获取当前连接网卡链路地址、DNS地址等信息判断处理用户连接网络位置等应用侧能力

方案描述

场景一:

应用内部获取当前使用网络类型为wifi / 移动数据 及当前网络可连接状态做业务处理

效果图

cke_9568.png

核心代码

connection.getDefaultNet().then((netHandle: connection.NetHandle) => {

connection.getNetCapabilities(netHandle).then((data: connection.NetCapabilities) => {

console.log(JSON.stringify(data));

})

});

场景二:

应用侧需要知道用户当前连接网络状态并作对应的业务处理,如网络断开返回弹框提示、应用中是否按缓存数据展示图片等

效果图

cke_12687.png

以wifi切换为例监听成功返回日志,可参考打印日志如图

方案

调用connection模块能力,使用前需要调用register开启监听,监听结束后需要调用unregister关闭当前监听请求

核心代码

//网络状态监听

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地址等信息判断处理用户连接网络位置等应用侧能力

效果图

cke_2272.png

方案

步骤:1、如需要获取蜂窝网络信息,创建时需要添加关注

2、调用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));

})

});
  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值