基于connection的网络连接管理能力

HarmonyOS官方账号
发布于 2024-10-9 09:00
浏览
0收藏

​场景描述

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

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

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

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

方案描述

场景一:

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

效果图

基于connection的网络连接管理能力-鸿蒙开发者社区

核心代码

connection.getDefaultNet().then((netHandle: connection.NetHandle) => { 
  connection.getNetCapabilities(netHandle).then((data: connection.NetCapabilities) => { 
    console.log(JSON.stringify(data)); 
  }) 
});

场景二:

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

效果图

基于connection的网络连接管理能力-鸿蒙开发者社区

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

效果图

基于connection的网络连接管理能力-鸿蒙开发者社区

方案

步骤:

  • 如需要获取蜂窝网络信息,创建时需要添加关注。
  • 调用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)); 
  }) 
});


分类
收藏
回复
举报
回复
    相关推荐