网络场景识别 (C/C++)
==============

#### 场景介绍

应用在订阅网络场景识别后，系统在网络场景实时信息或预测信息发生变化后回调给应用，回调的网络场景信息包括数据传输的链路类型、网络场景类型、数传策略建议、弱信号信息等。

#### 接口说明

具体API说明详见[接口文档](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/network-boost-c-overview)。

| 接口名 | 描述 |
| :-- | :-- |
| int32\_t HMS\_NetworkBoost\_RegisterNetSceneCallback(HMS\_NetworkBoost\_NetSceneChange callback, uint32\_t\* callbackId) | 注册网络场景信息状态变化回调。 |
| int32\_t HMS\_NetworkBoost\_UnregisterNetSceneCallback(uint32\_t callbackId) | 取消注册网络场景信息状态变化回调。 |

#### 开发步骤

1.  导入Network Boost Kit模块。
    
    #include "NetworkBoostKit/network\_boost\_quality.h"
    #include <cstdio>
    
2.  CMakeLists.txt中添加以下lib，具体请见[C API开发准备](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/networkboost-preparations#c-api开发准备)。
    
    libnetwork\_boost.so
    
3.  通过注册回调的方式监听网络场景识别信息。
    
    uint32\_t callbackId = 0;
    void onNetworkSceneChanged(NetworkBoost\_NetworkScene \*ns)
    {
        // 网络场景识别回调信息处理
        printf("数据路径类型: %d\\n", ns->pathType);
        printf("网络场景: %d\\n", ns->scene);
        switch (ns->scene) {
            case NB\_SCENE\_NORMAL:
                // 普通场景处理
                break;
            case NB\_SCENE\_CONGESTION:
                // 拥塞场景处理
                break;
            case NB\_SCENE\_FREQUENT\_HANDOVER:
                // 信号快切场景处理
                break;
            case NB\_SCENE\_WEAK\_SIGNAL:
                // 弱信号场景处理
                break;
        }
        printf("应用数传策略建议: %d\\n", ns->recommendedAction);
        if (ns->weakSignalPrediction.duration > 0) {
            // 弱信号预测处理
        }
    }
    
    int32\_t RegisterNetSceneCallback()
    {
        HMS\_NetworkBoost\_NetSceneChange callback;
        callback = onNetworkSceneChanged;
        // 注册回调，获取回调Id
        int32\_t ret = HMS\_NetworkBoost\_RegisterNetSceneCallback(callback, &callbackId);
        printf("注册网络场景结果: %d, Id：%d\\n", ret, callbackId);
        return ret;
    }
    
4.  当应用业务流程结束，通过取消注册的方式取消监听网络场景识别信息。
    
    int32\_t UnregisterNetSceneCallback()
    {
        // 使用注册时获取的回调Id取消注册
        int32\_t ret = HMS\_NetworkBoost\_UnregisterNetSceneCallback(callbackId);
        printf("取消注册网络场景结果: %d\\n", ret);
        return ret;
    }