• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 流量管理
2
3## 简介
4
5流量管理提供了基于物理网络的数据流量统计能力,支持基于网卡/UID 的流量统计。
6
7流量管理主要实现功能有:
8
9- 支持基于网卡/UID 的实时流量统计。
10- 支持基于网卡/UID 的历史流量统计。
11- 支持基于网卡/UID 的流量变化订阅。
12
13> **说明:**
14> 为了保证应用的运行效率,大部分 API 调用都是异步的,对于异步调用的 API 均提供了 callback 和 Promise 两种方式,以下示例均采用 callback 函数,更多方式可以查阅[API 参考](../reference/apis/js-apis-net-statistics.md)。
15
16以下分别介绍具体开发方式。
17
18## 接口说明
19
20完整的 JS API 说明以及实例代码请参考:[statistics 链接](../reference/apis/js-apis-net-statistics.md)。
21
22| 接口名                                                                                      | 描述                         |
23| ------------------------------------------------------------------------------------------- | ---------------------------- |
24| getIfaceRxBytes(nic: string, callback: AsyncCallback\<number>): void;                       | 获取指定网卡实时下行流量数据。 |
25| getIfaceTxBytes(nic: string, callback: AsyncCallback\<number>): void;                       | 获取指定网卡实时上行流量数据。 |
26| getCellularRxBytes(callback: AsyncCallback\<number>): void;                                 | 获取蜂窝实时下行流量数据。     |
27| getCellularTxBytes(callback: AsyncCallback\<number>): void;                                 | 获取蜂窝实时上行流量数据。     |
28| getAllRxBytes(callback: AsyncCallback\<number>): void;                                      | 获取所有网卡实时下行流量数据。 |
29| getAllTxBytes(callback: AsyncCallback\<number>): void;                                      | 获取所有网卡实时上行流量数据。 |
30| getUidRxBytes(uid: number, callback: AsyncCallback\<number>): void;                         | 获取指定应用实时下行流量数据。 |
31| getUidTxBytes(uid: number, callback: AsyncCallback\<number>): void;                         | 获取指定应用实时上行流量数据。 |
32| getTrafficStatsByIface(ifaceInfo: IfaceInfo, callback: AsyncCallback\<NetStatsInfo>): void; | 获取指定网卡历史流量信息。     |
33| getTrafficStatsByUid(uidInfo: UidInfo, callback: AsyncCallback\<NetStatsInfo>): void;       | 获取指定应用历史流量信息。     |
34| on(type: 'netStatsChange', callback: Callback\<{ iface: string, uid?: number }>): void      | 订阅流量改变事件通知。         |
35| off(type: 'netStatsChange', callback?: Callback\<{ iface: string, uid?: number }>): void;   | 取消订阅流量改变事件通知。     |
36
37## 获取网卡/UID 的实时流量统计数据
38
391. 获取指定网卡实时实时流量数据。
402. 获取蜂窝实时实时流量数据。
413. 获取所有网卡实时实时流量数据。
424. 获取指定应用实时实时流量数据。
43
44```ts
45// 从@ohos.net.statistics中导入statistics命名空间
46import statistics from '@ohos.net.statistics';
47import { BusinessError } from '@ohos.base';
48
49//获取指定网卡实时下行流量数据。
50statistics.getIfaceRxBytes('wlan0', (error: BusinessError, stats: number) => {
51  console.log(JSON.stringify(error));
52  console.log(JSON.stringify(stats));
53});
54
55//获取指定网卡实时上行流量数据。
56statistics.getIfaceTxBytes('wlan0', (error: BusinessError, stats: number) => {
57  console.log(JSON.stringify(error));
58  console.log(JSON.stringify(stats));
59});
60
61//获取蜂窝实时下行流量数据。
62statistics.getCellularRxBytes((error: BusinessError, stats: number) => {
63  console.log(JSON.stringify(error));
64  console.log(JSON.stringify(stats));
65});
66
67//获取蜂窝实时上行流量数据。
68statistics.getCellularTxBytes((error: BusinessError, stats: number) => {
69  console.log(JSON.stringify(error));
70  console.log(JSON.stringify(stats));
71});
72
73//获取所有网卡实时下行流量数据。
74statistics.getAllRxBytes((error: BusinessError, stats: number) => {
75  console.log(JSON.stringify(error));
76  console.log(JSON.stringify(stats));
77});
78
79//获取所有网卡实时上行流量数据。
80statistics.getAllTxBytes((error: BusinessError, stats: number) => {
81  console.log(JSON.stringify(error));
82  console.log(JSON.stringify(stats));
83});
84
85//获取指定应用实时下行流量数据。
86let uid = 20010038;
87statistics.getUidRxBytes(uid, (error: BusinessError, stats: number) => {
88  console.log(JSON.stringify(error));
89  console.log(JSON.stringify(stats));
90});
91
92//获取指定应用实时上行流量数据。
93let uids = 20010038;
94statistics.getUidTxBytes(uids, (error: BusinessError, stats: number) => {
95  console.log(JSON.stringify(error));
96  console.log(JSON.stringify(stats));
97});
98```
99
100## 获取网卡/UID 的历史流量统计数据
101
1021. 获取指定网卡历史流量信息。
1032. 获取指定应用历史流量信息。
104
105```ts
106import statistics from '@ohos.net.statistics';
107import { BusinessError } from '@ohos.base';
108
109class IfaceInfo {
110  iface: string = "wlan0"
111  startTime: number = 1685948465
112  endTime: number = 16859485670
113}
114//获取指定网卡历史流量信息。
115statistics.getTrafficStatsByIface(new IfaceInfo(), (error: BusinessError, statsInfo: statistics.NetStatsInfo) => {
116  console.log(JSON.stringify(error))
117  console.log("getTrafficStatsByIface bytes of received = " + JSON.stringify(statsInfo.rxBytes));
118  console.log("getTrafficStatsByIface bytes of sent = " + JSON.stringify(statsInfo.txBytes));
119  console.log("getTrafficStatsByIface packets of received = " + JSON.stringify(statsInfo.rxPackets));
120  console.log("getTrafficStatsByIface packets of sent = " + JSON.stringify(statsInfo.txPackets));
121});
122
123class UidInfo {
124  uid: number = 20010037
125  ifaceInfo: IfaceInfo = new IfaceInfo()
126}
127
128let uidInfo = new UidInfo()
129
130//获取指定应用历史流量信息。
131statistics.getTrafficStatsByUid(uidInfo, (error: BusinessError, statsInfo: statistics.NetStatsInfo) => {
132  console.log(JSON.stringify(error))
133  console.log("getTrafficStatsByUid bytes of received = " + JSON.stringify(statsInfo.rxBytes));
134  console.log("getTrafficStatsByUid bytes of sent = " + JSON.stringify(statsInfo.txBytes));
135  console.log("getTrafficStatsByUid packets of received = " + JSON.stringify(statsInfo.rxPackets));
136  console.log("getTrafficStatsByUid packets of sent = " + JSON.stringify(statsInfo.txPackets));
137});
138```
139
140## 订阅流量变化事件
141
1421. 订阅流量改变事件通知。
1432. 取消订阅流量改变事件通知。
144
145```ts
146import statistics from '@ohos.net.statistics';
147class Data {
148  iface: string = ""
149  uid?: number = 0
150}
151
152let callback = (data: Data) => {
153  console.log('on netStatsChange, data:' + JSON.stringify(data));
154};
155//订阅流量改变事件通知。
156statistics.on('netStatsChange', callback);
157
158//取消订阅流量改变事件通知。可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
159statistics.off('netStatsChange', callback);
160statistics.off('netStatsChange');
161```
162