> 技术文档 > 鸿蒙NEXT开发网络相关工具类NetworkUtil(ArkTs)_鸿蒙网络工具类

鸿蒙NEXT开发网络相关工具类NetworkUtil(ArkTs)_鸿蒙网络工具类

import { connection } from \'@kit.NetworkKit\';
import { BusinessError, Callback } from \'@kit.BasicServicesKit\';
import { wifiManager } from \'@kit.ConnectivityKit\';
import { LogUtil } from \'./LogUtil\';
import { data, radio, sim } from \'@kit.TelephonyKit\';
 
// 网络类型枚举
export enum NetworkType {
  NETWORK_TYPE_UNKNOWN = 0,
  NETWORK_TYPE_WIFI = 1,
  NETWORK_TYPE_2G = 2,
  NETWORK_TYPE_3G = 3,
  NETWORK_TYPE_4G = 4,
  NETWORK_TYPE_5G = 5,
}
 
/**
 * 网络相关工具类
 * 需要 ohos.permission.GET_NETWORK_INFO、ohos.permission.GET_WIFI_INFO 权限。
 * author: CSDN-鸿蒙布道师
 * since: 2025/04/23
 */
export class NetworkUtil {
  private static netConnection: connection.NetConnection | null = null;
 
  /**
   * 检查默认网络是否按流量计费
   */
  static async isDefaultNetMetered(): Promise {
    try {
      return await connection.isDefaultNetMetered();
    } catch (error) {
      LogUtil.error(\'Failed to check default network metering:\', error);
      throw new Error(error);
    }
  }
 
  static isDefaultNetMeteredSync(): boolean {
    return connection.isDefaultNetMeteredSync();
  }
 
  /**
   * 检查是否有默认网络
   */
  static async hasDefaultNet(): Promise {
    try {
      return await connection.hasDefaultNet();
    } catch (error) {
      LogUtil.error(\'Failed to check if there is a default network:\', error);
      // 确保抛出的是 Error 类型
      throw new Error(error);
    }
  }
 
  static hasDefaultNetSync(): boolean {
    return connection.hasDefaultNetSync();
  }
 
  /**
   * 获取默认网络句柄
   */
  static async getDefaultNet(): Promise {
    try {
      return await connection.getDefaultNet();
    } catch (error) {
      LogUtil.error(\'Failed to get default network handle:\', error);
      throw new Error(error);
    }
  }
 
  static getDefaultNetSync(): connection.NetHandle {
    return connection.getDefaultNetSync();
  }
 
  /**
   * 获取应用当前网络句柄
   */
  static async getAppNet(): Promise {
    try {
      return await connection.getAppNet();
    } catch (error) {
      LogUtil.error(\'Failed to get app network handle:\', error);
      throw new Error(error);
    }
  }
 
  static getAppNetSync(): connection.NetHandle {
    return connection.getAppNetSync();
  }
 
  /**
   * 获取所有可用网络句柄
   */
  static async getAllNets(): Promise<Array> {
    try {
      return await connection.getAllNets();
    } catch (error) {
      LogUtil.error(\'Failed to get all network handles:\', error);
      throw new Error(error);
    }
  }
 
  static getAllNetsSync(): Array {
    return connection.getAllNetsSync();
  }
 
  /**
   * 检查是否有可用网络
   */
  static isNetworkAvailable(): boolean {
    const allNets = NetworkUtil.getAllNetsSync();
    return Array.isArray(allNets) && allNets.length > 0;
  }
 
  /**
   * 检查是否有指定类型的网络连接
   */
  static hasNetBearType(netType: connection.NetBearType): boolean {
    const bearTypes = NetworkUtil.getNetBearTypes();
    return bearTypes.includes(netType);
  }
 
  static hasNetMobile(): boolean {
    return NetworkUtil.hasNetBearType(connection.NetBearType.BEARER_CELLULAR);
  }
 
  static hasNetWiFi(): boolean {
    return NetworkUtil.hasNetBearType(connection.NetBearType.BEARER_WIFI);
  }
 
  static hasNetEthernet(): boolean {
    return NetworkUtil.hasNetBearType(connection.NetBearType.BEARER_ETHERNET);
  }
 
  static hasNetVPN(): boolean {
    return NetworkUtil.hasNetBearType(connection.NetBearType.BEARER_VPN);
  }
 
  /**
   * 获取网络承载类型列表
   */
  static getNetBearTypes(): Array {
    const netCapabilities = NetworkUtil.getNetCapabilitiesSync(NetworkUtil.getDefaultNetSync());
    return netCapabilities?.bearerTypes || [];
  }
 
  static getNetBearType(): connection.NetBearType {
    const bearTypes = NetworkUtil.getNetBearTypes();
    return bearTypes[0] || connection.NetBearType.BEARER_CELLULAR;
  }
 
  /**
   * 获取网络能力
   */
  static async getNetCapabilities(
    netHandle: connection.NetHandle = NetworkUtil.getDefaultNetSync()
  ): Promise {
    try {
      return await connection.getNetCapabilities(netHandle);
    } catch (error) {
      LogUtil.error(\'Failed to get network capabilities:\', error);
      throw new Error(error);
    }
  }
 
  static getNetCapabilitiesSync(
    netHandle: connection.NetHandle = NetworkUtil.getDefaultNetSync()
  ): connection.NetCapabilities {
    return connection.getNetCapabilitiesSync(netHandle);
  }
 
  /**
   * 获取网络连接属性
   */
  static async getConnectionProperties(
    netHandle: connection.NetHandle = NetworkUtil.getDefaultNetSync()
  ): Promise {
    try {
      return await connection.getConnectionProperties(netHandle);
    } catch (error) {
      LogUtil.error(\'Failed to get connection properties:\', error);
      throw new Error(error);
    }
  }
 
  static getConnectionPropertiesSync(
    netHandle: connection.NetHandle = NetworkUtil.getDefaultNetSync()
  ): connection.ConnectionProperties {
    return connection.getConnectionPropertiesSync(netHandle);
  }
 
  /**
   * 获取当前设备的IP地址
   */
  static getIpAddress(): string {
    try {
      const ipAddress = wifiManager.getIpInfo().ipAddress;
      return [
        (ipAddress >>> 24) & 0xFF,
        (ipAddress >>> 16) & 0xFF,
        (ipAddress >>> 8) & 0xFF,
        ipAddress & 0xFF,
      ].join(\'.\');
    } catch (error) {
      LogUtil.error(\'Failed to get IP address:\', error);
      return \'0.0.0.0\';
    }
  }
 
  /**
   * 注册网络事件监听器
   */
  static register(
    netAvailableCallback?: Callback,
    netUnavailableCallback?: Callback,
    netCapabilitiesChangeCallback?: Callback,
    netConnectionPropertiesChangeCallback?: Callback,
    netBlockStatusChangeCallback?: Callback,
    netLostCallback?: Callback
  ): void {
    if (!NetworkUtil.netConnection) {
      NetworkUtil.netConnection = connection.createNetConnection();
    }
 
    // 注册默认网络回调
    connection.getDefaultNet((error: BusinessError, netHandle: connection.NetHandle) => {
      if (error) {
        LogUtil.error(\'Failed to get default network:\', error);
      } else if (netHandle && netAvailableCallback) {
        netAvailableCallback(netHandle);
      }
    });
 
    // 注册网络事件监听器
    NetworkUtil.netConnection.register((error: BusinessError) => {
      if (error) {
        LogUtil.error(\'Failed to register network events:\', error);
      }
    });
 
    if (netAvailableCallback) {
      NetworkUtil.netConnection.on(\'netAvailable\', netAvailableCallback);
    }
    if (netUnavailableCallback) {
      NetworkUtil.netConnection.on(\'netUnavailable\', netUnavailableCallback);
    }
    if (netCapabilitiesChangeCallback) {
      NetworkUtil.netConnection.on(\'netCapabilitiesChange\', netCapabilitiesChangeCallback);
    }
    if (netConnectionPropertiesChangeCallback) {
      NetworkUtil.netConnection.on(\'netConnectionPropertiesChange\', netConnectionPropertiesChangeCallback);
    }
    if (netBlockStatusChangeCallback) {
      NetworkUtil.netConnection.on(\'netBlockStatusChange\', netBlockStatusChangeCallback);
    }
    if (netLostCallback) {
      NetworkUtil.netConnection.on(\'netLost\', netLostCallback);
    }
  }
 
  /**
   * 取消注册网络事件监听器
   */
  static unregister(): void {
    if (NetworkUtil.netConnection) {
      NetworkUtil.netConnection.unregister((error: BusinessError) => {
        if (error) {
          LogUtil.error(\'Failed to unregister network events:\', error);
        }
      });
      NetworkUtil.netConnection = null;
    }
  }
 
  /**
   * 检查是否支持NR(5G)
   */
  static isNRSupported(slotId?: number): boolean {
    try {
      return slotId ? radio.isNRSupported(slotId) : radio.isNRSupported();
    } catch (error) {
      LogUtil.error(\'Failed to check NR support:\', error);
      return false;
    }
  }
 
  /**
   * 检查无线电是否开启
   */
  static async isRadioOn(slotId?: number): Promise {
    try {
      return slotId ? await radio.isRadioOn(slotId) : await radio.isRadioOn();
    } catch (error) {
      LogUtil.error(\'Failed to check radio status:\', error);
      return false;
    }
  }
 
  /**
   * 获取主卡槽ID
   */
  static async getPrimarySlotId(): Promise {
    try {
      return await radio.getPrimarySlotId();
    } catch (error) {
      LogUtil.error(\'Failed to get primary slot ID:\', error);
      throw new Error(error);
    }
  }
 
  /**
   * 获取运营商名称
   */
  static async getOperatorName(slotId?: number): Promise {
    try {
      slotId = slotId ?? (await NetworkUtil.getPrimarySlotId());
      return await radio.getOperatorName(slotId);
    } catch (error) {
      LogUtil.error(\'Failed to get operator name:\', error);
      throw new Error(error);
    }
  }
 
  /**
   * 获取网络状态
   */
  static async getNetworkState(slotId?: number): Promise {
    try {
      slotId = slotId ?? (await NetworkUtil.getPrimarySlotId());
      return await radio.getNetworkState(slotId);
    } catch (error) {
      LogUtil.error(\'Failed to get network state:\', error);
      throw new Error(error);
    }
  }
 
  /**
   * 获取网络选择模式
   */
  static async getNetworkSelectionMode(slotId?: number): Promise {
    try {
      slotId = slotId ?? (await NetworkUtil.getPrimarySlotId());
      return await radio.getNetworkSelectionMode(slotId);
    } catch (error) {
      LogUtil.error(\'Failed to get network selection mode:\', error);
      throw new Error(error);
    }
  }
 
  /**
   * 获取信号信息
   */
  static async getSignalInformation(slotId?: number): Promise<Array> {
    try {
      slotId = slotId ?? (await NetworkUtil.getPrimarySlotId());
      return await radio.getSignalInformation(slotId);
    } catch (error) {
      LogUtil.error(\'Failed to get signal information:\', error);
      throw new Error(error);
    }
  }
 
  /**
   * 获取当前网络类型
   */
  static async getNetworkType(): Promise {
    try {
      if (NetworkUtil.hasNetWiFi()) {
        return NetworkType.NETWORK_TYPE_WIFI;
      }
      if (NetworkUtil.hasNetMobile()) {
        const signalInfo = await NetworkUtil.getSignalInformation();
        for (const item of signalInfo) {
          switch (item.signalType) {
            case radio.NetworkType.NETWORK_TYPE_GSM:
            case radio.NetworkType.NETWORK_TYPE_CDMA:
              return NetworkType.NETWORK_TYPE_2G;
            case radio.NetworkType.NETWORK_TYPE_WCDMA:
            case radio.NetworkType.NETWORK_TYPE_TDSCDMA:
              return NetworkType.NETWORK_TYPE_3G;
            case radio.NetworkType.NETWORK_TYPE_LTE:
              return NetworkType.NETWORK_TYPE_4G;
            case radio.NetworkType.NETWORK_TYPE_NR:
              return NetworkType.NETWORK_TYPE_5G;
            default:
              break;
          }
        }
      }
    } catch (error) {
      LogUtil.error(\'Failed to determine network type:\', error);
    }
    return NetworkType.NETWORK_TYPE_UNKNOWN;
  }
 
  /**
   * 获取当前网络类型字符串
   */
  static async getNetworkTypeStr(): Promise {
    const networkType = await NetworkUtil.getNetworkType();
    switch (networkType) {
      case NetworkType.NETWORK_TYPE_WIFI:
        return \'Wi-Fi\';
      case NetworkType.NETWORK_TYPE_2G:
        return \'2G\';
      case NetworkType.NETWORK_TYPE_3G:
        return \'3G\';
      case NetworkType.NETWORK_TYPE_4G:
        return \'4G\';
      case NetworkType.NETWORK_TYPE_5G:
        return \'5G\';
      default:
        return \'UNKNOWN\';
    }
  }
 
  /**
   * 获取默认蜂窝数据卡槽ID(异步)
   */
  static async getDefaultCellularDataSlotId(): Promise {
    try {
      return await data.getDefaultCellularDataSlotId();
    } catch (error) {
      LogUtil.error(\'Failed to get default cellular data slot ID:\', error);
      throw new Error(error);
    }
  }
 
  /**
   * 获取默认蜂窝数据卡槽ID(同步)
   */
  static getDefaultCellularDataSlotIdSync(): number {
    try {
      return data.getDefaultCellularDataSlotIdSync();
    } catch (error) {
      LogUtil.error(\'Failed to get default cellular data slot ID (sync):\', error);
      throw new Error(error);
    }
  }
 
  /**
   * 获取蜂窝数据流量类型
   */
  static async getCellularDataFlowType(): Promise {
    try {
      return await data.getCellularDataFlowType();
    } catch (error) {
      LogUtil.error(\'Failed to get cellular data flow type:\', error);
      throw new Error(error);
    }
  }
 
  /**
   * 获取蜂窝数据连接状态
   */
  static async getCellularDataState(): Promise {
    try {
      return await data.getCellularDataState();
    } catch (error) {
      LogUtil.error(\'Failed to get cellular data state:\', error);
      throw new Error(error);
    }
  }
 
  /**
   * 检查蜂窝数据是否启用(异步)
   */
  static async isCellularDataEnabled(): Promise {
    try {
      return await data.isCellularDataEnabled();
    } catch (error) {
      LogUtil.error(\'Failed to check if cellular data is enabled:\', error);
      return false;
    }
  }
 
  /**
   * 检查蜂窝数据是否启用(同步)
   */
  static isCellularDataEnabledSync(): boolean {
    try {
      return data.isCellularDataEnabledSync();
    } catch (error) {
      LogUtil.error(\'Failed to check if cellular data is enabled (sync):\', error);
      return false;
    }
  }
 
  /**
   * 检查漫游是否启用(异步)
   */
  static async isCellularDataRoamingEnabled(slotId?: number): Promise {
    try {
      slotId = slotId ?? (await NetworkUtil.getDefaultCellularDataSlotId());
      return await data.isCellularDataRoamingEnabled(slotId);
    } catch (error) {
      LogUtil.error(\'Failed to check if cellular data roaming is enabled:\', error);
      return false;
    }
  }
 
  /**
   * 检查漫游是否启用(同步)
   */
  static isCellularDataRoamingEnabledSync(slotId?: number): boolean {
    try {
      slotId = slotId ?? NetworkUtil.getDefaultCellularDataSlotIdSync();
      return data.isCellularDataRoamingEnabledSync(slotId);
    } catch (error) {
      LogUtil.error(\'Failed to check if cellular data roaming is enabled (sync):\', error);
      return false;
    }
  }
 
  /**
   * 获取默认蜂窝数据SIM卡ID
   */
  static getDefaultCellularDataSimId(): number {
    try {
      return data.getDefaultCellularDataSimId();
    } catch (error) {
      LogUtil.error(\'Failed to get default cellular data SIM ID:\', error);
      throw new Error(error);
    }
  }
 
  /**
   * 检查SIM卡是否激活(异步)
   */
  static async isSimActive(slotId: number): Promise {
    try {
      return await sim.isSimActive(slotId);
    } catch (error) {
      LogUtil.error(`Failed to check if SIM card at slot ${slotId} is active:`, error);
      return false;
    }
  }
 
  /**
   * 检查SIM卡是否激活(同步)
   */
  static isSimActiveSync(slotId: number): boolean {
    try {
      return sim.isSimActiveSync(slotId);
    } catch (error) {
      LogUtil.error(`Failed to check if SIM card at slot ${slotId} is active (sync):`, error);
      return false;
    }
  }
 
  /**
   * 检查是否有SIM卡(异步)
   */
  static async hasSimCard(slotId: number): Promise {
    try {
      return await sim.hasSimCard(slotId);
    } catch (error) {
      LogUtil.error(`Failed to check if SIM card exists at slot ${slotId}:`, error);
      return false;
    }
  }
 
  /**
   * 检查是否有SIM卡(同步)
   */
  static hasSimCardSync(slotId: number): boolean {
    try {
      return sim.hasSimCardSync(slotId);
    } catch (error) {
      LogUtil.error(`Failed to check if SIM card exists at slot ${slotId} (sync):`, error);
      return false;
    }
  }
 
  /**
   * 获取最大支持的SIM卡数量
   */
  static getMaxSimCount(): number {
    try {
      return sim.getMaxSimCount();
    } catch (error) {
      LogUtil.error(\'Failed to get maximum SIM count:\', error);
      throw new Error(error);
    }
  }
 
  /**
   * 获取SIM卡运营商编号(异步)
   */
  static async getSimOperatorNumeric(slotId?: number): Promise {
    try {
      slotId = slotId ?? (await NetworkUtil.getDefaultCellularDataSlotId());
      return await sim.getSimOperatorNumeric(slotId);
    } catch (error) {
      LogUtil.error(\'Failed to get SIM operator numeric:\', error);
      throw new Error(error);
    }
  }
 
  /**
   * 获取SIM卡运营商编号(同步)
   */
  static getSimOperatorNumericSync(slotId?: number): string {
    try {
      slotId = slotId ?? NetworkUtil.getDefaultCellularDataSlotIdSync();
      return sim.getSimOperatorNumericSync(slotId);
    } catch (error) {
      LogUtil.error(\'Failed to get SIM operator numeric (sync):\', error);
      throw new Error(error);
    }
  }
 
  /**
   * 获取SIM卡服务提供商名称(异步)
   */
  static async getSimSpn(slotId?: number): Promise {
    try {
      slotId = slotId ?? (await NetworkUtil.getDefaultCellularDataSlotId());
      return await sim.getSimSpn(slotId);
    } catch (error) {
      LogUtil.error(\'Failed to get SIM SPN:\', error);
      throw new Error(error);
    }
  }
 
  /**
   * 获取SIM卡服务提供商名称(同步)
   */
  static getSimSpnSync(slotId?: number): string {
    try {
      slotId = slotId ?? NetworkUtil.getDefaultCellularDataSlotIdSync();
      return sim.getSimSpnSync(slotId);
    } catch (error) {
      LogUtil.error(\'Failed to get SIM SPN (sync):\', error);
      throw new Error(error);
    }
  }
 
  /**
   * 获取SIM卡状态(异步)
   */
  static async getSimState(slotId?: number): Promise {
    try {
      slotId = slotId ?? (await NetworkUtil.getDefaultCellularDataSlotId());
      return await sim.getSimState(slotId);
    } catch (error) {
      LogUtil.error(\'Failed to get SIM state:\', error);
      throw new Error(error);
    }
  }
 
  /**
   * 获取SIM卡状态(同步)
   */
  static getSimStateSync(slotId?: number): sim.SimState {
    try {
      slotId = slotId ?? NetworkUtil.getDefaultCellularDataSlotIdSync();
      return sim.getSimStateSync(slotId);
    } catch (error) {
      LogUtil.error(\'Failed to get SIM state (sync):\', error);
      throw new Error(error);
    }
  }
 
  /**
   * 获取SIM卡类型(异步)
   */
  static async getCardType(slotId?: number): Promise {
    try {
      slotId = slotId ?? (await NetworkUtil.getDefaultCellularDataSlotId());
      return await sim.getCardType(slotId);
    } catch (error) {
      LogUtil.error(\'Failed to get SIM card type:\', error);
      throw new Error(error);
    }
  }
 
  /**
   * 获取SIM卡类型(同步)
   */
  static getCardTypeSync(slotId?: number): sim.CardType {
    try {
      slotId = slotId ?? NetworkUtil.getDefaultCellularDataSlotIdSync();
      return sim.getCardTypeSync(slotId);
    } catch (error) {
      LogUtil.error(\'Failed to get SIM card type (sync):\', error);
      throw new Error(error);
    }
  }
}

import { connection } from \'@kit.NetworkKit\';import { BusinessError, Callback } from \'@kit.BasicServicesKit\';import { wifiManager } from \'@kit.ConnectivityKit\';import { LogUtil } from \'./LogUtil\';import { data, radio, sim } from \'@kit.TelephonyKit\'; // 网络类型枚举export enum NetworkType { NETWORK_TYPE_UNKNOWN = 0, NETWORK_TYPE_WIFI = 1, NETWORK_TYPE_2G = 2, NETWORK_TYPE_3G = 3, NETWORK_TYPE_4G = 4, NETWORK_TYPE_5G = 5,} /** * 网络相关工具类 * 需要 ohos.permission.GET_NETWORK_INFO、ohos.permission.GET_WIFI_INFO 权限。 * author: CSDN-鸿蒙布道师 * since: 2025/04/23 */export class NetworkUtil { private static netConnection: connection.NetConnection | null = null; /** * 检查默认网络是否按流量计费 */ static async isDefaultNetMetered(): Promise { try { return await connection.isDefaultNetMetered(); } catch (error) { LogUtil.error(\'Failed to check default network metering:\', error); throw new Error(error); } } static isDefaultNetMeteredSync(): boolean { return connection.isDefaultNetMeteredSync(); } /** * 检查是否有默认网络 */ static async hasDefaultNet(): Promise { try { return await connection.hasDefaultNet(); } catch (error) { LogUtil.error(\'Failed to check if there is a default network:\', error); // 确保抛出的是 Error 类型 throw new Error(error); } } static hasDefaultNetSync(): boolean { return connection.hasDefaultNetSync(); } /** * 获取默认网络句柄 */ static async getDefaultNet(): Promise { try { return await connection.getDefaultNet(); } catch (error) { LogUtil.error(\'Failed to get default network handle:\', error); throw new Error(error); } } static getDefaultNetSync(): connection.NetHandle { return connection.getDefaultNetSync(); } /** * 获取应用当前网络句柄 */ static async getAppNet(): Promise { try { return await connection.getAppNet(); } catch (error) { LogUtil.error(\'Failed to get app network handle:\', error); throw new Error(error); } } static getAppNetSync(): connection.NetHandle { return connection.getAppNetSync(); } /** * 获取所有可用网络句柄 */ static async getAllNets(): Promise<Array> { try { return await connection.getAllNets(); } catch (error) { LogUtil.error(\'Failed to get all network handles:\', error); throw new Error(error); } } static getAllNetsSync(): Array { return connection.getAllNetsSync(); } /** * 检查是否有可用网络 */ static isNetworkAvailable(): boolean { const allNets = NetworkUtil.getAllNetsSync(); return Array.isArray(allNets) && allNets.length > 0; } /** * 检查是否有指定类型的网络连接 */ static hasNetBearType(netType: connection.NetBearType): boolean { const bearTypes = NetworkUtil.getNetBearTypes(); return bearTypes.includes(netType); } static hasNetMobile(): boolean { return NetworkUtil.hasNetBearType(connection.NetBearType.BEARER_CELLULAR); } static hasNetWiFi(): boolean { return NetworkUtil.hasNetBearType(connection.NetBearType.BEARER_WIFI); } static hasNetEthernet(): boolean { return NetworkUtil.hasNetBearType(connection.NetBearType.BEARER_ETHERNET); } static hasNetVPN(): boolean { return NetworkUtil.hasNetBearType(connection.NetBearType.BEARER_VPN); } /** * 获取网络承载类型列表 */ static getNetBearTypes(): Array { const netCapabilities = NetworkUtil.getNetCapabilitiesSync(NetworkUtil.getDefaultNetSync()); return netCapabilities?.bearerTypes || []; } static getNetBearType(): connection.NetBearType { const bearTypes = NetworkUtil.getNetBearTypes(); return bearTypes[0] || connection.NetBearType.BEARER_CELLULAR; } /** * 获取网络能力 */ static async getNetCapabilities( netHandle: connection.NetHandle = NetworkUtil.getDefaultNetSync() ): Promise { try { return await connection.getNetCapabilities(netHandle); } catch (error) { LogUtil.error(\'Failed to get network capabilities:\', error); throw new Error(error); } } static getNetCapabilitiesSync( netHandle: connection.NetHandle = NetworkUtil.getDefaultNetSync() ): connection.NetCapabilities { return connection.getNetCapabilitiesSync(netHandle); } /** * 获取网络连接属性 */ static async getConnectionProperties( netHandle: connection.NetHandle = NetworkUtil.getDefaultNetSync() ): Promise { try { return await connection.getConnectionProperties(netHandle); } catch (error) { LogUtil.error(\'Failed to get connection properties:\', error); throw new Error(error); } } static getConnectionPropertiesSync( netHandle: connection.NetHandle = NetworkUtil.getDefaultNetSync() ): connection.ConnectionProperties { return connection.getConnectionPropertiesSync(netHandle); } /** * 获取当前设备的IP地址 */ static getIpAddress(): string { try { const ipAddress = wifiManager.getIpInfo().ipAddress; return [ (ipAddress >>> 24) & 0xFF, (ipAddress >>> 16) & 0xFF, (ipAddress >>> 8) & 0xFF, ipAddress & 0xFF, ].join(\'.\'); } catch (error) { LogUtil.error(\'Failed to get IP address:\', error); return \'0.0.0.0\'; } } /** * 注册网络事件监听器 */ static register( netAvailableCallback?: Callback, netUnavailableCallback?: Callback, netCapabilitiesChangeCallback?: Callback, netConnectionPropertiesChangeCallback?: Callback, netBlockStatusChangeCallback?: Callback, netLostCallback?: Callback ): void { if (!NetworkUtil.netConnection) { NetworkUtil.netConnection = connection.createNetConnection(); } // 注册默认网络回调 connection.getDefaultNet((error: BusinessError, netHandle: connection.NetHandle) => { if (error) { LogUtil.error(\'Failed to get default network:\', error); } else if (netHandle && netAvailableCallback) { netAvailableCallback(netHandle); } }); // 注册网络事件监听器 NetworkUtil.netConnection.register((error: BusinessError) => { if (error) { LogUtil.error(\'Failed to register network events:\', error); } }); if (netAvailableCallback) { NetworkUtil.netConnection.on(\'netAvailable\', netAvailableCallback); } if (netUnavailableCallback) { NetworkUtil.netConnection.on(\'netUnavailable\', netUnavailableCallback); } if (netCapabilitiesChangeCallback) { NetworkUtil.netConnection.on(\'netCapabilitiesChange\', netCapabilitiesChangeCallback); } if (netConnectionPropertiesChangeCallback) { NetworkUtil.netConnection.on(\'netConnectionPropertiesChange\', netConnectionPropertiesChangeCallback); } if (netBlockStatusChangeCallback) { NetworkUtil.netConnection.on(\'netBlockStatusChange\', netBlockStatusChangeCallback); } if (netLostCallback) { NetworkUtil.netConnection.on(\'netLost\', netLostCallback); } } /** * 取消注册网络事件监听器 */ static unregister(): void { if (NetworkUtil.netConnection) { NetworkUtil.netConnection.unregister((error: BusinessError) => { if (error) { LogUtil.error(\'Failed to unregister network events:\', error); } }); NetworkUtil.netConnection = null; } } /** * 检查是否支持NR(5G) */ static isNRSupported(slotId?: number): boolean { try { return slotId ? radio.isNRSupported(slotId) : radio.isNRSupported(); } catch (error) { LogUtil.error(\'Failed to check NR support:\', error); return false; } } /** * 检查无线电是否开启 */ static async isRadioOn(slotId?: number): Promise { try { return slotId ? await radio.isRadioOn(slotId) : await radio.isRadioOn(); } catch (error) { LogUtil.error(\'Failed to check radio status:\', error); return false; } } /** * 获取主卡槽ID */ static async getPrimarySlotId(): Promise { try { return await radio.getPrimarySlotId(); } catch (error) { LogUtil.error(\'Failed to get primary slot ID:\', error); throw new Error(error); } } /** * 获取运营商名称 */ static async getOperatorName(slotId?: number): Promise { try { slotId = slotId ?? (await NetworkUtil.getPrimarySlotId()); return await radio.getOperatorName(slotId); } catch (error) { LogUtil.error(\'Failed to get operator name:\', error); throw new Error(error); } } /** * 获取网络状态 */ static async getNetworkState(slotId?: number): Promise { try { slotId = slotId ?? (await NetworkUtil.getPrimarySlotId()); return await radio.getNetworkState(slotId); } catch (error) { LogUtil.error(\'Failed to get network state:\', error); throw new Error(error); } } /** * 获取网络选择模式 */ static async getNetworkSelectionMode(slotId?: number): Promise { try { slotId = slotId ?? (await NetworkUtil.getPrimarySlotId()); return await radio.getNetworkSelectionMode(slotId); } catch (error) { LogUtil.error(\'Failed to get network selection mode:\', error); throw new Error(error); } } /** * 获取信号信息 */ static async getSignalInformation(slotId?: number): Promise<Array> { try { slotId = slotId ?? (await NetworkUtil.getPrimarySlotId()); return await radio.getSignalInformation(slotId); } catch (error) { LogUtil.error(\'Failed to get signal information:\', error); throw new Error(error); } } /** * 获取当前网络类型 */ static async getNetworkType(): Promise { try { if (NetworkUtil.hasNetWiFi()) { return NetworkType.NETWORK_TYPE_WIFI; } if (NetworkUtil.hasNetMobile()) { const signalInfo = await NetworkUtil.getSignalInformation(); for (const item of signalInfo) { switch (item.signalType) { case radio.NetworkType.NETWORK_TYPE_GSM: case radio.NetworkType.NETWORK_TYPE_CDMA:  return NetworkType.NETWORK_TYPE_2G; case radio.NetworkType.NETWORK_TYPE_WCDMA: case radio.NetworkType.NETWORK_TYPE_TDSCDMA:  return NetworkType.NETWORK_TYPE_3G; case radio.NetworkType.NETWORK_TYPE_LTE:  return NetworkType.NETWORK_TYPE_4G; case radio.NetworkType.NETWORK_TYPE_NR:  return NetworkType.NETWORK_TYPE_5G; default:  break; } } } } catch (error) { LogUtil.error(\'Failed to determine network type:\', error); } return NetworkType.NETWORK_TYPE_UNKNOWN; } /** * 获取当前网络类型字符串 */ static async getNetworkTypeStr(): Promise { const networkType = await NetworkUtil.getNetworkType(); switch (networkType) { case NetworkType.NETWORK_TYPE_WIFI: return \'Wi-Fi\'; case NetworkType.NETWORK_TYPE_2G: return \'2G\'; case NetworkType.NETWORK_TYPE_3G: return \'3G\'; case NetworkType.NETWORK_TYPE_4G: return \'4G\'; case NetworkType.NETWORK_TYPE_5G: return \'5G\'; default: return \'UNKNOWN\'; } } /** * 获取默认蜂窝数据卡槽ID(异步) */ static async getDefaultCellularDataSlotId(): Promise { try { return await data.getDefaultCellularDataSlotId(); } catch (error) { LogUtil.error(\'Failed to get default cellular data slot ID:\', error); throw new Error(error); } } /** * 获取默认蜂窝数据卡槽ID(同步) */ static getDefaultCellularDataSlotIdSync(): number { try { return data.getDefaultCellularDataSlotIdSync(); } catch (error) { LogUtil.error(\'Failed to get default cellular data slot ID (sync):\', error); throw new Error(error); } } /** * 获取蜂窝数据流量类型 */ static async getCellularDataFlowType(): Promise { try { return await data.getCellularDataFlowType(); } catch (error) { LogUtil.error(\'Failed to get cellular data flow type:\', error); throw new Error(error); } } /** * 获取蜂窝数据连接状态 */ static async getCellularDataState(): Promise { try { return await data.getCellularDataState(); } catch (error) { LogUtil.error(\'Failed to get cellular data state:\', error); throw new Error(error); } } /** * 检查蜂窝数据是否启用(异步) */ static async isCellularDataEnabled(): Promise { try { return await data.isCellularDataEnabled(); } catch (error) { LogUtil.error(\'Failed to check if cellular data is enabled:\', error); return false; } } /** * 检查蜂窝数据是否启用(同步) */ static isCellularDataEnabledSync(): boolean { try { return data.isCellularDataEnabledSync(); } catch (error) { LogUtil.error(\'Failed to check if cellular data is enabled (sync):\', error); return false; } } /** * 检查漫游是否启用(异步) */ static async isCellularDataRoamingEnabled(slotId?: number): Promise { try { slotId = slotId ?? (await NetworkUtil.getDefaultCellularDataSlotId()); return await data.isCellularDataRoamingEnabled(slotId); } catch (error) { LogUtil.error(\'Failed to check if cellular data roaming is enabled:\', error); return false; } } /** * 检查漫游是否启用(同步) */ static isCellularDataRoamingEnabledSync(slotId?: number): boolean { try { slotId = slotId ?? NetworkUtil.getDefaultCellularDataSlotIdSync(); return data.isCellularDataRoamingEnabledSync(slotId); } catch (error) { LogUtil.error(\'Failed to check if cellular data roaming is enabled (sync):\', error); return false; } } /** * 获取默认蜂窝数据SIM卡ID */ static getDefaultCellularDataSimId(): number { try { return data.getDefaultCellularDataSimId(); } catch (error) { LogUtil.error(\'Failed to get default cellular data SIM ID:\', error); throw new Error(error); } } /** * 检查SIM卡是否激活(异步) */ static async isSimActive(slotId: number): Promise { try { return await sim.isSimActive(slotId); } catch (error) { LogUtil.error(`Failed to check if SIM card at slot ${slotId} is active:`, error); return false; } } /** * 检查SIM卡是否激活(同步) */ static isSimActiveSync(slotId: number): boolean { try { return sim.isSimActiveSync(slotId); } catch (error) { LogUtil.error(`Failed to check if SIM card at slot ${slotId} is active (sync):`, error); return false; } } /** * 检查是否有SIM卡(异步) */ static async hasSimCard(slotId: number): Promise { try { return await sim.hasSimCard(slotId); } catch (error) { LogUtil.error(`Failed to check if SIM card exists at slot ${slotId}:`, error); return false; } } /** * 检查是否有SIM卡(同步) */ static hasSimCardSync(slotId: number): boolean { try { return sim.hasSimCardSync(slotId); } catch (error) { LogUtil.error(`Failed to check if SIM card exists at slot ${slotId} (sync):`, error); return false; } } /** * 获取最大支持的SIM卡数量 */ static getMaxSimCount(): number { try { return sim.getMaxSimCount(); } catch (error) { LogUtil.error(\'Failed to get maximum SIM count:\', error); throw new Error(error); } } /** * 获取SIM卡运营商编号(异步) */ static async getSimOperatorNumeric(slotId?: number): Promise { try { slotId = slotId ?? (await NetworkUtil.getDefaultCellularDataSlotId()); return await sim.getSimOperatorNumeric(slotId); } catch (error) { LogUtil.error(\'Failed to get SIM operator numeric:\', error); throw new Error(error); } } /** * 获取SIM卡运营商编号(同步) */ static getSimOperatorNumericSync(slotId?: number): string { try { slotId = slotId ?? NetworkUtil.getDefaultCellularDataSlotIdSync(); return sim.getSimOperatorNumericSync(slotId); } catch (error) { LogUtil.error(\'Failed to get SIM operator numeric (sync):\', error); throw new Error(error); } } /** * 获取SIM卡服务提供商名称(异步) */ static async getSimSpn(slotId?: number): Promise { try { slotId = slotId ?? (await NetworkUtil.getDefaultCellularDataSlotId()); return await sim.getSimSpn(slotId); } catch (error) { LogUtil.error(\'Failed to get SIM SPN:\', error); throw new Error(error); } } /** * 获取SIM卡服务提供商名称(同步) */ static getSimSpnSync(slotId?: number): string { try { slotId = slotId ?? NetworkUtil.getDefaultCellularDataSlotIdSync(); return sim.getSimSpnSync(slotId); } catch (error) { LogUtil.error(\'Failed to get SIM SPN (sync):\', error); throw new Error(error); } } /** * 获取SIM卡状态(异步) */ static async getSimState(slotId?: number): Promise { try { slotId = slotId ?? (await NetworkUtil.getDefaultCellularDataSlotId()); return await sim.getSimState(slotId); } catch (error) { LogUtil.error(\'Failed to get SIM state:\', error); throw new Error(error); } } /** * 获取SIM卡状态(同步) */ static getSimStateSync(slotId?: number): sim.SimState { try { slotId = slotId ?? NetworkUtil.getDefaultCellularDataSlotIdSync(); return sim.getSimStateSync(slotId); } catch (error) { LogUtil.error(\'Failed to get SIM state (sync):\', error); throw new Error(error); } } /** * 获取SIM卡类型(异步) */ static async getCardType(slotId?: number): Promise { try { slotId = slotId ?? (await NetworkUtil.getDefaultCellularDataSlotId()); return await sim.getCardType(slotId); } catch (error) { LogUtil.error(\'Failed to get SIM card type:\', error); throw new Error(error); } } /** * 获取SIM卡类型(同步) */ static getCardTypeSync(slotId?: number): sim.CardType { try { slotId = slotId ?? NetworkUtil.getDefaultCellularDataSlotIdSync(); return sim.getCardTypeSync(slotId); } catch (error) { LogUtil.error(\'Failed to get SIM card type (sync):\', error); throw new Error(error); } }}