前言

计量网络(Metered Network)是指按流量计费的网络,如蜂窝数据。在计量网络下应避免大流量操作,@pura/harmony-utilsNetworkUtil 封装了计量网络检测方法。本文将从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();
}

五、注意事项

  1. WiFi热点:手机开启的WiFi热点也可能被识别为计量网络
  2. 用户设置:用户可以在系统设置中标记网络为计量
  3. 流量提醒:建议在计量网络下进行大流量操作前提醒用户
  4. 初始化依赖:使用前需确保 AppUtil.init() 已调用
  5. 动态变化:网络切换时计量状态可能变化

六、常见问题

Q1: WiFi网络被识别为计量网络?

可能是用户在系统设置中将该WiFi标记为计量网络,或连接的是手机热点。

Q2: isMeteredNetwork()和isCellularConnected()有什么区别?

isMeteredNetwork() 判断是否按流量计费,isCellularConnected() 仅判断是否蜂窝连接。蜂窝一定是计量的,但计量网络不一定只有蜂窝。

Q3: 如何在计量网络下限制流量?

建议降低图片质量、暂停自动下载、使用数据压缩等策略。

Q4: 用户可以修改计量网络标记吗?

可以,用户可以在系统WiFi设置中将网络标记或取消计量标记。

总结

NetworkUtil 的计量网络检测方法为流量保护提供了判断依据。本文详细介绍了核心API、使用步骤、完整示例、进阶用法以及常见问题的解决方案。合理使用计量网络检测,可以避免用户产生意外流量费用。

本文基于 @pura/harmony-utils 工具库,更多功能请参考官方文档与后续系列文章。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐