HarmonyOS 鸿蒙Next基于connection的网络连接管理能力

HarmonyOS 鸿蒙Next基于connection的网络连接管理能力

场景描述

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

场景一:应用内部获取当前使用网络类型为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关闭当前监听请求,可参考:connection.netConnect

核心代码


//网络状态监听

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));

})

});


更多关于HarmonyOS 鸿蒙Next基于connection的网络连接管理能力的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

有没有具体的源码

更多关于HarmonyOS 鸿蒙Next基于connection的网络连接管理能力的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


您好,当前技术文章配套的demo工程正在外发中,后续会发布至gitee上,敬请关注!

你好,关于网络连接状态问题,

场景:一个需要认证的网络,没认证的情况下网络不可用,这种情况通过哪个api判断这个网络是否可用?

可通过connection模块中getNetCapabilities方法判断,返回NetCap数组对象包含【12,16】状态码时表示当前网络可使用

HarmonyOS 鸿蒙Next基于connection的网络连接管理能力提供了全面的网络管理功能。以下是对其网络连接管理能力的概述:

  1. 多网络连接管理:支持WiFi、蜂窝、Ethernet等多种网络连接,并能管理这些连接的优先级,确保数据传输的顺畅。
  2. 网络质量评估:能够获取网络的各种质量指标,如上下行带宽、时延等,为开发者提供网络优化的依据。
  3. 网络状态订阅:开发者可以订阅默认或指定网络连接状态的变化,以便在网络状态发生变化时及时作出响应。
  4. 网络连接信息查询:提供API接口,允许开发者查询网络连接信息,包括网络类型、连接状态等。
  5. DNS解析:支持DNS解析功能,确保应用能够正确解析域名并访问网络资源。

此外,HarmonyOS 鸿蒙Next还提供了网络加速服务(如Network Boost Kit),进一步优化了网络性能,提升了应用在网络方面的表现。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部