# 网络质量评估

## 场景介绍

应用在订阅网络质量Qos(Quality of Service)评估后，系统按照一定的周期或Qos变化后回调给应用。回调的Qos信息包括数据传输的链路类型、上下行空口实时带宽、上下行空口实时速率、RTT时延等。

## 接口说明

具体API说明详见[接口文档](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/networkboost-netquality#netqualityonnetqoschange)。

|接口名|描述|
|:----------------------------------------------------------------------|:-------------|
|on(type: 'netQosChange', callback: Callback<Array<NetworkQos>>): void|订阅Qos信息状态变化。|
|off(type: 'netQosChange', callback?: Callback<Array<NetworkQos>>): void|取消订阅Qos信息状态变化。|

## 开发步骤

1. 导入Network Boost Kit模块。

   ```typescript
   import { netQuality } from '@kit.NetworkBoostKit';
   import { BusinessError } from '@kit.BasicServicesKit';
   ```

2. 通过订阅的方式监听网络质量评估信息。

   ```typescript
   try {
     netQuality.on('netQosChange', (list: Array<netQuality.NetworkQos>) => {
       if (list.length > 0) {
         list.forEach((qos) => {
           // 回调信息处理
           console.info(`数据链路类型: ${JSON.stringify(qos.pathType)}.`);
           console.info(`该数据链路类型的上行带宽: ${JSON.stringify(qos.linkUpBandwidth)}.`);
           console.info(`该数据链路类型的下行带宽: ${JSON.stringify(qos.linkDownBandwidth)}.`);
           // 单位为bps，若需转化为B/s，数值需要除以8
           console.info(`该数据链路类型的上行速率: ${JSON.stringify(qos.linkUpRate)}.`);
           // 单位为bps，若需转化为B/s，数值需要除以8
           console.info(`该数据链路类型的下行速率: ${JSON.stringify(qos.linkDownRate)}.`);
           // 实时速率为上行速率和下行速率之和
           console.info(`该数据链路类型的实时速率(B/s): ${JSON.stringify((qos.linkUpRate + qos.linkDownRate) / 8)}.`);
           console.info(`该数据链路类型的RTT时延: ${JSON.stringify(qos.rttMs)}.`);
           console.info(`该数据链路类型的上行发送空口缓冲时延: ${JSON.stringify(qos.linkUpBufferDelayMs)}.`);
         });
       }
     });
   } catch (err) {
     console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
   }
   ```

3. 当应用业务流程结束，去订阅的方式取消监听网络质量评估信息。

   ```typescript
   try {
     netQuality.off('netQosChange');
   } catch (err) {
     console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
   }
   ```

