当前位置: 首页 > news >正文

鸿蒙NEXT开发网络相关工具类(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<boolean> {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<boolean> {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<connection.NetHandle> {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<connection.NetHandle> {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<connection.NetHandle>> {try {return await connection.getAllNets();} catch (error) {LogUtil.error('Failed to get all network handles:', error);throw new Error(error);}}static getAllNetsSync(): Array<connection.NetHandle> {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<connection.NetBearType> {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<connection.NetCapabilities> {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<connection.ConnectionProperties> {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<connection.NetHandle>,netUnavailableCallback?: Callback<void>,netCapabilitiesChangeCallback?: Callback<connection.NetCapabilityInfo>,netConnectionPropertiesChangeCallback?: Callback<connection.NetConnectionPropertyInfo>,netBlockStatusChangeCallback?: Callback<connection.NetBlockStatusInfo>,netLostCallback?: Callback<connection.NetHandle>): 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<boolean> {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<number> {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<string> {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<radio.NetworkState> {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<radio.NetworkSelectionMode> {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<radio.SignalInformation>> {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<NetworkType> {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<string> {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<number> {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<data.DataFlowType> {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<data.DataConnectState> {try {return await data.getCellularDataState();} catch (error) {LogUtil.error('Failed to get cellular data state:', error);throw new Error(error);}}/*** 检查蜂窝数据是否启用(异步)*/static async isCellularDataEnabled(): Promise<boolean> {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<boolean> {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<boolean> {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<boolean> {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<string> {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<string> {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<sim.SimState> {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<sim.CardType> {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<boolean> {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<boolean> {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<connection.NetHandle> {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<connection.NetHandle> {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<connection.NetHandle>> {try {return await connection.getAllNets();} catch (error) {LogUtil.error('Failed to get all network handles:', error);throw new Error(error);}}static getAllNetsSync(): Array<connection.NetHandle> {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<connection.NetBearType> {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<connection.NetCapabilities> {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<connection.ConnectionProperties> {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<connection.NetHandle>,netUnavailableCallback?: Callback<void>,netCapabilitiesChangeCallback?: Callback<connection.NetCapabilityInfo>,netConnectionPropertiesChangeCallback?: Callback<connection.NetConnectionPropertyInfo>,netBlockStatusChangeCallback?: Callback<connection.NetBlockStatusInfo>,netLostCallback?: Callback<connection.NetHandle>): 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<boolean> {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<number> {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<string> {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<radio.NetworkState> {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<radio.NetworkSelectionMode> {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<radio.SignalInformation>> {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<NetworkType> {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<string> {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<number> {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<data.DataFlowType> {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<data.DataConnectState> {try {return await data.getCellularDataState();} catch (error) {LogUtil.error('Failed to get cellular data state:', error);throw new Error(error);}}/*** 检查蜂窝数据是否启用(异步)*/static async isCellularDataEnabled(): Promise<boolean> {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<boolean> {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<boolean> {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<boolean> {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<string> {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<string> {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<sim.SimState> {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<sim.CardType> {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);}}
}

相关文章:

  • node.js 实战——(概念以及Buffer 知识点学习)
  • 数据结构线性表的顺序存储结构
  • openEuler安装nvidia驱动【详细版】
  • 外贸获客新革命:基于AI的搜索引擎排名攻防战——48小时抢占谷歌TOP3的技术逻辑与实战路径
  • 基于VUE+Node.JS实现(Web)学生组队网站
  • LInux平均负载
  • maven中pom.xml setting.xml关系
  • 二叉树OJ题目
  • 大模型框架技术全景与下一代架构演进
  • 如何批量为多张图片(JPG、PNG、BMP、WEBP 等格式)添加自定义水印保护
  • C++ 容器查找效率
  • 20250423修改和查看荣品的PRO-RK3566开发板的buildroot linux系统的cpu频率
  • Linux命令-sar
  • Python内置函数---bytearray()
  • 【Java设计模式及实践学习-第4章节-结构型模式】
  • 一对多的数据结构(树)的基本概念
  • spring-session-data-redis使用
  • 困局与破局:当传统校园能源管理遭遇“散沙式“能耗困局
  • opencv--图像滤波
  • 【ASR学习笔记】常见VAD模型识别语音活动的方式对比
  • 接棒路颖,国泰海通证券副总裁谢乐斌履新海富通基金董事长
  • 主动权益基金一季度重仓股出炉:腾讯跃升至第一,阿里、比亚迪、中芯国际新进前十
  • 告别国泰海通,黄燕铭下一站将加盟东方证券,负责研究业务
  • 锚定“水库不垮坝”目标,水利部部署今年水库安全度汛工作
  • 花3000元就能买“国际机构”的证书?揭秘假证产业链
  • 国家开发银行原副行长李吉平一审获刑14年