鸿蒙三方库 | harmony-utils之NetworkUtil计量网络检测详解
·
前言
计量网络(Metered Network)是指按流量计费的网络,如蜂窝数据。在计量网络下应避免大流量操作,@pura/harmony-utils 的 NetworkUtil 封装了计量网络检测方法。本文将从API说明、代码实战、进阶用法、常见问题等多个维度进行全面讲解,帮助开发者快速掌握并应用到实际项目中。

一、NetworkUtil计量核心API
NetworkUtil 提供了以下计量网络检测方法:
| 方法 | 说明 | 返回类型 | 使用场景 |
|---|---|---|---|
isMeteredNetwork() |
是否计量网络 | boolean | 流量保护 |
getConnectionType() |
获取连接类型 | string | 类型展示 |
1.1 核心特性
- 简洁易用:封装复杂API为一行调用,降低使用门槛
- 类型安全:完整的TypeScript类型定义,编译期即可发现错误
- 异常处理:内置异常捕获机制,避免运行时崩溃
- 流量保护:为流量敏感操作提供判断依据
1.2 计量网络判断策略
| 网络类型 | 是否计量 | 说明 |
|---|---|---|
| WiFi | 通常否 | 家庭/办公WiFi免费 |
| 蜂窝数据 | 是 | 按流量计费 |
| WiFi热点 | 可能是 | 手机热点可能计费 |
| 以太网 | 通常否 | 固定网络免费 |
二、完整使用步骤
2.1 安装依赖
ohpm install @pura/harmony-utils
2.2 检测计量网络
import { NetworkUtil } from '@pura/harmony-utils';
Button('检测计量网络')
.width('100%')
.onClick(() => {
try {
let isMetered = NetworkUtil.isMeteredNetwork();
this.result = `计量网络: ${isMetered ? '是 📊(注意流量)' : '否(WiFi等免费网络)'}`;
} catch (e) {
this.result = '异常: ' + e;
}
})
2.3 根据计量状态调整行为
async downloadLargeFile() {
if (NetworkUtil.isMeteredNetwork()) {
let confirm = await DialogUtil.confirm('当前为计量网络,下载可能产生流量费用,是否继续?');
if (!confirm) return;
}
this.startDownload();
}

三、完整页面示例
import { NetworkUtil } from '@pura/harmony-utils';
@Entry
@Component
struct MeteredDemo {
@State result: string = '';
build() {
Column({ space: 12 }) {
Button('检测计量网络').width('100%').onClick(() => {
try {
let isMetered = NetworkUtil.isMeteredNetwork();
this.result = `计量: ${isMetered ? '是' : '否'}`;
} catch (e) { this.result = '异常: ' + e; }
});
Text(this.result).fontSize(14).fontColor('#333333')
}
.padding(16)
}
}
四、进阶用法
4.1 流量保护策略
import { NetworkUtil, ToastUtil } from '@pura/harmony-utils';
function canPerformHeavyTask(): boolean {
if (NetworkUtil.isMeteredNetwork()) {
ToastUtil.showToast('当前为计量网络,建议连接WiFi后操作');
return false;
}
return true;
}
4.2 自动下载策略
function shouldAutoDownload(): boolean {
return !NetworkUtil.isMeteredNetwork() && NetworkUtil.isNetworkAvailable();
}
五、注意事项
- WiFi热点:手机开启的WiFi热点也可能被识别为计量网络
- 用户设置:用户可以在系统设置中标记网络为计量
- 流量提醒:建议在计量网络下进行大流量操作前提醒用户
- 初始化依赖:使用前需确保
AppUtil.init()已调用 - 动态变化:网络切换时计量状态可能变化
六、常见问题
Q1: WiFi网络被识别为计量网络?
可能是用户在系统设置中将该WiFi标记为计量网络,或连接的是手机热点。
Q2: isMeteredNetwork()和isCellularConnected()有什么区别?
isMeteredNetwork() 判断是否按流量计费,isCellularConnected() 仅判断是否蜂窝连接。蜂窝一定是计量的,但计量网络不一定只有蜂窝。
Q3: 如何在计量网络下限制流量?
建议降低图片质量、暂停自动下载、使用数据压缩等策略。
Q4: 用户可以修改计量网络标记吗?
可以,用户可以在系统WiFi设置中将网络标记或取消计量标记。
总结
NetworkUtil 的计量网络检测方法为流量保护提供了判断依据。本文详细介绍了核心API、使用步骤、完整示例、进阶用法以及常见问题的解决方案。合理使用计量网络检测,可以避免用户产生意外流量费用。
本文基于
@pura/harmony-utils工具库,更多功能请参考官方文档与后续系列文章。
更多推荐



所有评论(0)