鸿蒙三方库 | harmony-utils之NetworkUtil默认网络与绑定网络详解
📅 2026/7/17 20:56:53
👁️ 阅读次数
📝 编程学习
前言
在多网络环境下(如同时连接WiFi和蜂窝),了解默认网络和绑定网络的概念对网络管理很重要。@pura/harmony-utils的NetworkUtil封装了默认网络查询方法。本文将从API说明、代码实战、进阶用法、常见问题等多个维度进行全面讲解,帮助开发者快速掌握并应用到实际项目中。
一、NetworkUtil默认网络核心API
NetworkUtil提供了以下默认网络查询方法:
| 方法 | 说明 | 返回类型 | 使用场景 |
|---|---|---|---|
getDefaultNetwork() | 获取默认网络 | object | 网络管理 |
isDefaultNetworkMetered() | 默认网络是否计量 | boolean | 流量判断 |
hasDefaultNetwork() | 是否有默认网络 | boolean | 网络可用性 |
1.1 核心特性
- 简洁易用:封装复杂API为一行调用,降低使用门槛
- 类型安全:完整的TypeScript类型定义,编译期即可发现错误
- 异常处理:内置异常捕获机制,避免运行时崩溃
- 多网络支持:支持多网络环境下的默认网络判断
1.2 默认网络选择策略
| 场景 | 默认网络 | 说明 |
|---|---|---|
| WiFi+蜂窝 | WiFi | WiFi优先 |
| 仅蜂窝 | 蜂窝 | 无WiFi时使用蜂窝 |
| 仅以太网 | 以太网 | 有线网络优先 |
| 无网络 | 无 | 网络不可用 |
二、完整使用步骤
2.1 安装依赖
ohpminstall@pura/harmony-utils2.2 查询默认网络
import{NetworkUtil}from'@pura/harmony-utils';Button('查询默认网络').width('100%').onClick(()=>{try{lethasDefault=NetworkUtil.hasDefaultNetwork();letisMetered=NetworkUtil.isDefaultNetworkMetered();this.result=`有默认网络:${hasDefault?'是 ✅':'否 ❌'}\n是否计量:${isMetered?'是':'否'}`;}catch(e){this.result='异常: '+e;}})2.3 网络选择策略
getBestNetwork():string{if(NetworkUtil.isWifiConnected()){return'WiFi';}elseif(NetworkUtil.isCellularConnected()){return'蜂窝';}return'无网络';}三、完整页面示例
import{NetworkUtil}from'@pura/harmony-utils';@Entry@Componentstruct DefaultNetDemo{@Stateresult:string='';build(){Column({space:12}){Button('查询默认网络').width('100%').onClick(()=>{try{lethasDefault=NetworkUtil.hasDefaultNetwork();letisMetered=NetworkUtil.isDefaultNetworkMetered();this.result=`默认网络:${hasDefault?'可用':'不可用'}\n计量:${isMetered?'是':'否'}`;}catch(e){this.result='异常: '+e;}});Text(this.result).fontSize(14).fontColor('#333333')}.padding(16)}}四、进阶用法
4.1 多网络环境管理
import{NetworkUtil}from'@pura/harmony-utils';functiongetNetworkReport():Record<string,boolean>{return{hasDefault:NetworkUtil.hasDefaultNetwork(),isMetered:NetworkUtil.isDefaultNetworkMetered(),isWifi:NetworkUtil.isWifiConnected(),isCellular:NetworkUtil.isCellularConnected()};}4.2 智能网络选择
functionselectNetworkForTask(taskType:string):string{if(taskType==='download'&&NetworkUtil.isDefaultNetworkMetered()){return'建议连接WiFi后下载';}return'当前网络可用';}五、注意事项
- 默认网络:系统自动选择的最优网络作为默认网络
- 网络优先级:WiFi > 以太网 > 蜂窝
- 动态切换:默认网络可能随网络状态变化自动切换
- 初始化依赖:使用前需确保
AppUtil.init()已调用 - 权限要求:需要网络相关权限
六、常见问题
Q1: hasDefaultNetwork()和isNetworkAvailable()有什么区别?
hasDefaultNetwork()判断是否有系统默认网络,isNetworkAvailable()判断网络是否可用,两者通常一致但不完全相同。
Q2: 默认网络可以手动指定吗?
普通应用无法指定默认网络,由系统根据网络优先级自动选择。
Q3: 同时连接WiFi和蜂窝时使用哪个?
系统默认使用WiFi,蜂窝作为备用。WiFi断开时自动切换到蜂窝。
Q4: getDefaultNetwork()返回的对象包含什么?
返回默认网络的标识对象,具体内容取决于系统实现,可用于网络绑定等操作。
总结
NetworkUtil的默认网络查询方法为多网络环境管理提供了数据支撑。本文详细介绍了核心API、使用步骤、完整示例、进阶用法以及常见问题的解决方案。开发者可以根据默认网络状态智能调整网络策略。
本文基于
@pura/harmony-utils工具库,更多功能请参考官方文档与后续系列文章。
编程学习
技术分享
实战经验