HarmonyOS 鸿蒙Next 获取设备IP

发布于 1周前 作者 yibo5220 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 获取设备IP

大家知道如何通过移动网络获取用户设备的ip地址吗?

2 回复

先配置权限ohos.permission.GET_NETWORK_INFO
代码:

import { connection } from '[@kit](/user/kit).NetworkKit';

  // 获取网络类型

  getConnection() {

    // 检测是否有默认连接的网络

    const hasDefaultNet = connection.hasDefaultNetSync()

    // 没有网络

    if (!hasDefaultNet) {

      this.netBearType = '无网络'

    } else {

      // 获取网络类型

      this.getConnectionNetBearType()

      // 获取链路信息

      this.getConnectionProperties()

    }

  }

  // 获取网络类型

  getConnectionNetBearType() {

    // 1. 获取默认网络

    const defaultNet = connection.getDefaultNetSync()

    // 2. 获取网络能力信息

    const netCapabilities = connection.getNetCapabilitiesSync(defaultNet)

    // 3. 判断网络类型

    if (netCapabilities.bearerTypes.includes(connection.NetBearType.BEARER_ETHERNET)) {

      // 温馨提示:模拟器为以太网网络(网线)

      this.netBearType = '以太网网络'

    } else if (netCapabilities.bearerTypes.includes(connection.NetBearType.BEARER_WIFI)) {

      this.netBearType = 'WIFI网络'

    } else if (netCapabilities.bearerTypes.includes(connection.NetBearType.BEARER_CELLULAR)) {

      this.netBearType = '蜂窝网络'

    } else {

      this.netBearType = '有网络'

    }

  }

  // 获取链路信息

  getConnectionProperties() {

    // 获取默认网络的链路信息

    const connectionProperties = connection.getConnectionPropertiesSync(connection.getDefaultNetSync())

    // 提取链路信息

    const linkAddress = connectionProperties.linkAddresses[0]

    if (linkAddress) {

      // 获取 IP 地址

      this.IPAddress = linkAddress.address.address

      // 计算子网掩码(了解)

      this.subnetMask = this.calculateSubnetMask(linkAddress.prefixLength)

      // 计算广播地址(了解)

      this.broadcastAddress = this.calculateBroadcastAddress(this.IPAddress, this.subnetMask)

    }

  }

  /**

   * 计算子网掩码

   * [@param](/user/param) prefixLength 前缀长度

   * [@returns](/user/returns) 子网掩码字符串

   */

  calculateSubnetMask(prefixLength: number): string {

    // 计算每个字节的子网掩码部分

    let subnetMask = '';

    for (let i = 0; i < 4; i++) {

      // 每个字节中的有效位数

      const bits = Math.min(prefixLength, 8);

      // 计算子网掩码字节的值并添加到结果字符串

      subnetMask += (256 - Math.pow(2, 8 - bits)) + '.';

      // 更新剩余的位数

      prefixLength -= bits;

    }

    // 去除末尾的点并返回子网掩码字符串

    return subnetMask.slice(0, -1);

  }

  /**

   * 计算广播地址

   * [@param](/user/param) ipAddress IP地址字符串,例如 "192.168.2.13"

   * [@param](/user/param) subnetMask 子网掩码字符串,例如 "255.255.255.0"

   * [@returns](/user/returns) 广播地址字符串

   */

  calculateBroadcastAddress(ipAddress: string, subnetMask: string): string {

    // 将IP地址字符串转换为数字数组

    const ipParts: number[] = ipAddress.split('.')

      .map(Number);

    // 将子网掩码字符串转换为数字数组

    const subnetParts: number[] = subnetMask.split('.')

      .map(Number);

    // 计算每个字节的广播地址部分

    const broadcastParts: number[] = [];

    for (let i = 0; i < 4; i++) {

      // 计算每个字节的广播地址值并添加到结果数组

      broadcastParts.push(ipParts[i] | (255 - subnetParts[i]));

    }

    // 将结果数组转换为字符串并使用点分隔

    return broadcastParts.join('.');

  }

在HarmonyOS(鸿蒙)系统中获取设备IP地址的操作,通常依赖于系统提供的网络API或系统服务。以下是在鸿蒙应用开发中获取设备IP地址的一种通用方法:

  1. 使用ConnectivityManager

    • 在鸿蒙应用开发中,可以通过ConnectivityManager来获取设备的网络连接信息。
    • 调用ConnectivityManagergetActiveNetworkInfo()方法获取当前网络的信息。
    • 通过网络信息获取网络接口的详细信息,包括IP地址。
  2. 使用NetworkUtils(假设存在)

    • 某些鸿蒙开发环境可能提供了类似Android的NetworkUtils工具类,用于直接获取设备的IP地址。
    • 如果存在这样的工具类,可以直接调用其获取IP地址的方法。
  3. 注意事项

    • 获取IP地址的操作需要相应的权限,确保在应用的config.json中声明了必要的权限。
    • 不同版本的鸿蒙系统可能API有所不同,建议查阅最新的鸿蒙开发文档。

示例代码(伪代码,具体实现需根据鸿蒙API调整):

ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
// 根据networkInfo获取网络接口及IP地址...

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

回到顶部