蓝亭书序 2026-10-28 17:05:29 发布1、概述
HarmonyOS供了基于物理网络的数据流量统计能力,支持基于网卡/UID 的流量统计。主要实现的功能如下:
- 支持基于网卡/UID 的实时流量统计。
- 支持基于网卡/UID 的历史流量统计。
- 支持基于网卡/UID 的流量变化订阅。
数据流量统计能力由 statistics 模块提供。目前HarmonyOS提供的数据流量统计的能力有9种,我们分别讨论。
2、数据流量统计接口
👉🏻 获取指定网卡实时下行流量数据
针对异步场景HarmonyOS提供两套类似的API,一个是callback形式,另一个是promise形式(后文所有接口都按照此规律,不再重复说明)。
// 异步callback类型
getIfaceRxBytes(nic: string, callback: AsyncCallback<number>): void;
// 异步promise类型
getIfaceRxBytes(nic: string): Promise<number>;参数 nic 表示的是网卡名,callback或Promise返回值表示获取到的实时下行流量,单位(byte)。针对callback的示例如下:
import { BusinessError } from '@kit.BasicServicesKit';
import { statistics } from '@kit.NetworkKit';
statistics.getIfaceRxBytes("wlan0", (error: BusinessError, stats: number) => {
console.log(JSON.stringify(error));
console.log(JSON.stringify(stats));
});error表示获取过程出现错误,错误码如下:
| 错误码 ID | 错误信息 |
| 401 | 参数错误 |
| 2100002 | 连接设备错误 |
| 2100003 | 系统内部错误 |
| 2103005 | 读取系统map失败。 |
| 2103011 | 系统map创建失败 |
| 2103012 | 获取网卡名失败 |
👉🏻 获取指定网卡实时上行流量数据。
接口形式分别为callback形式和promise形式。
// callback形式接口
getIfaceTxBytes(nic: string, callback: AsyncCallback<number>): void;
// promise形式接口
getIfaceTxBytes(nic: string): Promise<number>;nic参数是网卡名,与下行流量接口类似,callback和Promise的返回值分别是上行流量,单位(byte)。针对Promise接口示例代码如下:
import { statistics } from '@kit.NetworkKit';
statistics.getIfaceRxBytes("wlan0").then((stats: number) => {
console.log(JSON.stringify(stats));
});【由于接口的使用方法基本相同,后文就不再举例示例代码介绍接口,直接看接口定义即可】
👉🏻 获取蜂窝实时下行流量数据
// callback形式
getCellularRxBytes(callback: AsyncCallback<number>): void;
// promise形式
getCellularRxBytes(): Promise<number>;👉🏻 获取蜂窝实时上行流量数据
// callback形式
getCellularTxBytes(callback: AsyncCallback<number>): void;
// Promise形式
getCellularTxBytes(): Promise<number>;👉🏻 获取所有网卡实时下行流量数据
// callback接口
getAllRxBytes(callback: AsyncCallback<number>): void;
// promise接口
getAllRxBytes(): Promise<number>;👉🏻 获取所有网卡实时上行流量数据
// callback接口形式
getAllTxBytes(callback: AsyncCallback<number>): void;
// Promise接口形式
getAllTxBytes(): Promise<number>;
👉🏻 获取指定应用实时下行流量数据
// callback接口
getUidRxBytes(uid: number, callback: AsyncCallback<number>): void;
// Promise接口
getUidRxBytes(uid: number): Promise<number>;👉🏻 获取指定应用实时上行流量数据
// callback接口
getUidTxBytes(uid: number, callback: AsyncCallback<number>): void;
// promise接口
getUidTxBytes(uid: number): Promise<number>;👉🏻 获取Socket实时下行流量数据
// callback接口
getSockfdRxBytes(sockfd: number, callback: AsyncCallback<number>): void;
// Promise接口
getSockfdRxBytes(sockfd: number): Promise<number>;
【SocketFd的获取请参看后文的DEMO】
👉🏻 获取Socket实时上行流量数据
// callback接口
getSockfdTxBytes(sockfd: number, callback: AsyncCallback<number>): void;
// Promise接口
getSockfdTxBytes(sockfd: number): Promise<number>;3、DEMO
- 获取指定网卡实时流量数据。
- 获取蜂窝实时流量数据。
- 获取所有网卡实时流量数据。
- 获取指定应用实时流量数据。
- 获取指定socket实时流量数据。
// 从@kit.NetworkKit中导入statistics命名空间
import { statistics, socket } from '@kit.NetworkKit';
import { BusinessError } from '@kit.BasicServicesKit';
// 获取指定网卡实时下行流量数据。
statistics.getIfaceRxBytes("wlan0").then((stats: number) => {
console.log(JSON.stringify(stats));
});
// 获取指定网卡实时上行流量数据。
statistics.getIfaceTxBytes("wlan0").then((stats: number) => {
console.log(JSON.stringify(stats));
});
// 获取蜂窝实时下行流量数据。
statistics.getCellularRxBytes().then((stats: number) => {
console.log(JSON.stringify(stats));
});
// 获取蜂窝实时上行流量数据。
statistics.getCellularTxBytes().then((stats: number) => {
console.log(JSON.stringify(stats));
});
// 获取所有网卡实时下行流量数据。
statistics.getAllRxBytes().then((stats: number) => {
console.log(JSON.stringify(stats));
});
// 获取所有网卡实时上行流量数据。
statistics.getAllTxBytes().then((stats: number) => {
console.log(JSON.stringify(stats));
});
// 获取指定应用实时下行流量数据。
let uid = 20010038;
statistics.getUidRxBytes(uid).then((stats: number) => {
console.log(JSON.stringify(stats));
});
// 获取指定应用实时上行流量数据。
let uids = 20010038;
statistics.getUidTxBytes(uids).then((stats: number) => {
console.log(JSON.stringify(stats));
});
// 获取指定socket实时下行流量数据。
let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
tcp.getSocketFd().then((sockfd: number) => {
statistics.getSockfdRxBytes(sockfd).then((stats: number) => {
console.log(JSON.stringify(stats));
}).catch((err: BusinessError) => {
console.error(JSON.stringify(err));
});
});
// 获取指定socket实时上行流量数据。
tcp.getSocketFd().then((sockfd: number) => {
statistics.getSockfdTxBytes(sockfd).then((stats: number) => {
console.log(JSON.stringify(stats));
}).catch((err: BusinessError) => {
console.error(JSON.stringify(err));
});
});相关推荐
蓝亭书序
0
0
蓝亭书序
0
0
蓝亭书序
0
0
蓝亭书序
0
0
蓝亭书序
0
0
蓝亭书序
我还没有写个人简介......
帖子
提问
粉丝
鸿蒙网络管理模块06——使用rcp发送HTTP请求
2026-10-28 17:06:19 发布异步场景: promise、async函数与await命令介绍
2026-10-28 17:04:47 发布



京公网安备:11010502051901号