目录

HarmonyOS-如何获取当前的网络类型

HarmonyOS 如何获取当前的网络类型

介绍

在HarmonyOS中,正确判断和获取网络类型是确保应用程序能在不同网络环境下稳定运行的关键步骤。本文将详细介绍如何在HarmonyOS中判断是否连接到网络,如何获取默认网络连接,以及如何获取和识别网络的能力信息,从而确定当前的网络类型。

1.判断是否有网络

在HarmonyOS中,首先需要判断设备是否已经连接到了网络。这一步是后续获取网络类型的前提。通过系统提供的 connection API中的 hasDefaultNetSync() 方法可以同步检查是否存在默认网络连接。如果返回 true ,则表示设备当前已连接到网络;如果返回 false ,则表示设备当前没有网络连接。

//根据网络连接情况来判断网络类型
getNetBearerType() {
  //是否连接网络
  const isHasDefaultNet = connection.hasDefaultNetSync()
  if (isHasDefaultNet) {
    this.netBearType = this.getConNetCapabilities()
  } else {
    this.netBearType = '无网络'
  }
}

2.获取默认连接的网络

确定设备已连接到网络后,下一步是获取这个网络连接的句柄(handle)。通过调用 connectionNetSync() 方法,可以同步获取当前默认网络的句柄。这个句柄是后续获取网络能力信息的关键。

//获取网络数据句柄
const netHandle =connection.getDefaultNetSync()

3.获取 netHandle 对应的网络的能力信息 (网络的能力集)NetCapabilities

有了网络句柄后,接下来需要利用这个句柄来查询网络的详细能力信息。这一步骤通过调用 connection.getNetCapabilitiesSync(netHandle) 完成,此方法同步返回指定网络句柄对应的网络能力信息,这包括了网络的类型、速度和其他特性。

//获取netHandle对应的网络的能力信息
const netCapabilities = connection.getNetCapabilitiesSync(netHandle)

4.在网络的能力集中获取网络类型 NetBearType

最后,通过解析 NetCapabilities 对象中的 bearerTypes 数组,可以确定网络的具体类型。这一解析过程在函数 getConNetCapabilities() 中实现。根据 bearerTypes 数组包含的值,可以判断网络是蜂窝数据网络(CELLULAR)、Wi-Fi网络或是以太网网络(ETHERNET)。

  • 如果 bearerTypes 包含 connection.NetBearType.BEARER_CELLULAR ,则网络类型为“蜂窝网络”。
  • 如果包含 connection.NetBearType.BEARER_WIFI ,则为“Wi-Fi网络”。
  • 如果包含 connection.NetBearType.BEARER_ETHERNET ,则为“以太网网络”。
  • 如果 bearerTypes 数组不包含上述任何一种类型,则可以判断为“无网络”。
//根据数组中的情况判断网络类型
if (netCapabilities.bearerTypes.includes(connection.NetBearType.BEARER_CELLULAR)) {
  return '蜂窝网络'
} else if (netCapabilities.bearerTypes.includes(connection.NetBearType.BEARER_WIFI)) {
  return 'Wi-Fi网络'
} else if (netCapabilities.bearerTypes.includes(connection.NetBearType.BEARER_ETHERNET)) {
  return '以太网网络'
} else {
  return '无网络'
}

5.完整代码

//根据网络连接情况来判断网络类型
getNetBearerType() {
  //是否连接网络
  const isHasDefaultNet = connection.hasDefaultNetSync()
  if (isHasDefaultNet) {
    this.netBearType = this.getConNetCapabilities()
  } else {
    this.netBearType = '无网络'
  }
}
//获取网络类型函数
getConNetCapabilities() {
  //获取网络数据句柄
  const netHandle = connection.getDefaultNetSync()
  //获取netHandle对应的网络的能力信息
  const netCapabilities = connection.getNetCapabilitiesSync(netHandle)
  //根据数组中的情况判断网络类型
  if (netCapabilities.bearerTypes.includes(connection.NetBearType.BEARER_CELLULAR)) {
    return '蜂窝网络'
  } else if (netCapabilities.bearerTypes.includes(connection.NetBearType.BEARER_WIFI)) {
    return 'Wi-Fi网络'
  } else if (netCapabilities.bearerTypes.includes(connection.NetBearType.BEARER_ETHERNET)) {
    return '以太网网络'
  } else {
    return '无网络'
  }
 
}