鸿蒙5.0&next开发【网络管理与状态监听开发】系统开发网络开发实战 ...

打印 上一主题 下一主题

主题 946|帖子 946|积分 2838

概述

本章主要先容了网络管理中网络连接管理、网络信息查询和网络状态监听等。


  • 网络连接管理主要包罗蜂窝网络和Wi-Fi网络的连接管理,用户可以自行选择使用蜂窝网络或是使用Wi-Fi网络。
  • 网络信息查询主要针对蜂窝网络和Wi-Fi网络的相关信息查询。
  • 网络状态监听主要包罗判定当前环境下网络是否可用以及是否处于弱网环境等环境。
在必要使用网络时,通常有两种选择:蜂窝网络或Wi-Fi网络。当成功连接蜂窝网络或Wi-Fi网络后,若应用必要区分当前连接的具体网络范例,可通过网络连接管理功能举行查询。当使用场景发生变化时,必要对网络状态举行监听,如查询当前网络是否可用、判定网络质量的优劣等,并据此做出切换网络或提示用户等操纵,从而提升用户体验。
本文章是为了帮助开发者了解网络管理中常用的查询方式:


  • 获取当前网络连接范例
  • 判定当前网络是否可用
  • 查询网络路由信息、网络链路信息
  • 获取网络状态,包罗蜂窝和Wi-Fi等网络状态
  • 查询蜂窝和Wi-Fi使用相关的信息
帮助开发者了解如何举行网络状态变化的监听:


  • 监听网络可用与丢失
  • 监听弱网环境
网络管理

查询网络连接信息

获取当前网络连接范例
当必要判定当前使用的网络是蜂窝或者Wi-Fi时,可以通过以下步骤实现:

  • 导入模块。
  1. import { connection } from '@kit.NetworkKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
复制代码

  • 使用[getDefaultNetSync()]先获取默认激活的数据网络。
  • 调用[getNetCapabilitiesSync()]去获取网络的范例、拥有的能力等信息。
  • 根据返回效果中的[bearerTypes]判定,为BEARER_CELLULAR时(值为0),表示蜂窝网络;为BEARER_WIFI时(值为1),表示Wi-Fi网络;为BEARER_BLUETOOTH时(值为2),表示蓝牙网络;为BEARER_ETHERNET时(值为3),表示以太网网络;为BEARER_VPN时(值为4),表示VPN网络。
核心代码
  1. getNetworkConnectionType() {
  2.   try {
  3.     let netHandle = connection.getDefaultNetSync();
  4.     if (!netHandle || netHandle.netId === 0) {
  5.       return;
  6.     }
  7.     let netCapability = connection.getNetCapabilitiesSync(netHandle);
  8.     console.log('bearerTypes:', JSON.stringify(netCapability.bearerTypes));
  9.   } catch (e) {
  10.     let err = e as BusinessError;
  11.     console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
  12.   }
  13. }
复制代码
判定当前网络是否可用
使用网络前,比方打开一个应用时,必要检查当前连接的网络是否可用。如果可用,则正常举行网络请求;如果不可用,则必要提示用户网络不可用。判定当前连接的网络是否可用,可以通过以下步骤实现:

  • 举行“获取当前网络连接范例”中的步骤1、2、3。
  • 根据返回效果,判定[networkCap]数组中的值是否存在与NET_CAPABILITY_VALIDATED相称的值。如果有,则表示网络可用。
核心代码
  1. judgeHasNet(): boolean {
  2.   try {
  3.     let netHandle = connection.getDefaultNetSync();
  4.     if (!netHandle || netHandle.netId === 0) {
  5.       return false;
  6.     }
  7.     let netCapability = connection.getNetCapabilitiesSync(netHandle);
  8.     let cap = netCapability.networkCap || [];
  9.     if (cap.includes(connection.NetCap.NET_CAPABILITY_VALIDATED)) {
  10.       //connection.NetCap.NET_CAPABILITY_VALIDATED,该值代表网络是通的,能够发起HTTP和HTTPS的请求。
  11.       // 网络信息变化,网络可用
  12.       return true;
  13.     } else {
  14.       // 网络信息变化,网络不可用
  15.       return false;
  16.     }
  17.   } catch (e) {
  18.     let err = e as BusinessError;
  19.     console.error("JudgeHasNet" + JSON.stringify(err));
  20.   }
  21.   return false;
  22. }
复制代码
查询网络路由信息、网络链路信息
当必要举行网络故障诊断、网络性能优化、考虑网络安全需求时,必要查询网络路由信息、网络链路信息等,可以通过以下步骤实现:

  • 举行“获取当前网络连接范例”中的步骤1。
  • 使用[getDefaultNet()]先获取默认激活的数据网络。
  • 调用[getConnectionProperties()]获取netHandle对应的网络的连接信息。
  • 返回效果[ConnectionProperties]中,即包罗网络路由信息[RouteInfo]、网络链路信息[LinkAddress]等。
核心代码
  1. getRouteInfoAndLinkAddress() {
  2.   connection.getDefaultNet().then((netHandle: connection.NetHandle) => {
  3.     if (!netHandle || netHandle.netId === 0) {
  4.       // 当前无默认网络时,获取的netHandler的netid为0,属于异常场景,此处可以实际情况自行添加一些处理机制。
  5.       return;
  6.     }
  7.     connection.getConnectionProperties(netHandle, (error: BusinessError, data: connection.ConnectionProperties) => {
  8.       if (error) {
  9.         console.error(`Failed to get connection properties. Code:${error.code}, message:${error.message}`);
  10.         return;
  11.       }
  12.       console.info("Succeeded to get data: " + JSON.stringify(data));
  13.       let routeInfo = data.routes;
  14.       let linkAddress = data.linkAddresses;
  15.       console.info("routeInfo is: " + JSON.stringify(routeInfo));
  16.       console.info("linkAddress is: " + JSON.stringify(linkAddress));
  17.     })
  18.   });
  19. }
复制代码
查询当前网络信息

蜂窝网络查询
下面将先容蜂窝网络的相关查询,主要包罗获取网络状态、查询当前网络是3G/4G/5G和判定主卡的Radio是否打开等。
获取网络状态
当必要查询手机卡注册网络的运营商名称、是否处于漫游状态、装备的网络注册状态等信息时,可以通过以下步骤实现:

  • 导入模块。
  1. import { radio } from '@kit.TelephonyKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
复制代码

  • 使用[getNetworkState()]获取网络状态。
  • 返回效果[NetworkState]中,包罗当前网络状态等信息,其中[regState]字段表示装备的网络注册状态。
核心代码
  1. getNetworkStatus(){
  2.   radio.getNetworkState((err: BusinessError, data: radio.NetworkState) => {
  3.     if (err) {
  4.       console.error(`getNetworkState failed, callback: err->${JSON.stringify(err)}`);
  5.       return;
  6.     }
  7.     console.log(`getNetworkState success, callback: data->${JSON.stringify(data)}`);
  8.   });
  9. }
复制代码
查询当前网络是3G/4G/5G
视频播放应用在5G网络下可以默认加载超高清视频,以充实利用高速带宽;在4G网络下加载高清视频;而在3G网络下,为了避免卡顿,可能只加载标清视频。如何控制加载对应清晰度的视频,就必要查询当前网络是3G/4G/5G,可以通过以下步骤实现:

  • 举行“获取网络状态”中的步骤1。
  • 使用[getSignalInformation()]获取指定SIM卡槽对应的注册网络信号强度信息列表。
  • 返回效果[signalinformation]中,signalType代表网络范例[NetworkType]。
signalType的值对应网络范比方下:
值网络范例GSM2GCDMA2GWCDMA3GTDSCDMA3GLTE4GNR5G 核心代码
  1. getSignalType(){
  2.   let slotId: number = 0;
  3.   radio.getSignalInformation(slotId, (err: BusinessError, data: Array<radio.SignalInformation>) => {
  4.     if (err) {
  5.       console.error(`getSignalInformation failed, callback: err->${JSON.stringify(err)}`);
  6.       return;
  7.     }
  8.     console.log(`getSignalInformation success, callback: data->${JSON.stringify(data)}`);
  9.     let signalType = data[0].signalType;
  10.     console.log(`signalType is: ${signalType}`);
  11.   });
  12. }
复制代码
判定主卡的Radio是否打开
当用户在国外或者其他运营商的网络覆盖区域时,主卡Radio打开可能会导致手机自动连接到其他网络并产生漫游费用。因此,判定主卡Radio的状态可以让用户提前做好防范措施。判定主卡的Radio是否打开,可以通过以下步骤实现:

  • 举行“获取网络状态”中的步骤1。
  • 使用[isRadioOn()]获取主卡的Radio状态。
  • 如果返回效果为true,则表示Radio已打开。否则,表示未打开。
核心代码
  1. getRadioStatus(){
  2.   radio.isRadioOn((err: BusinessError, data: boolean) => {
  3.     if (err) {
  4.       console.error(`isRadioOn failed, callback: err->${JSON.stringify(err)}`);
  5.       return;
  6.     }
  7.     console.log(`isRadioOn success, callback: data->${JSON.stringify(data)}`);
  8.   });
  9. }
复制代码
Wi-Fi查询
下面将先容Wi-Fi网络的相关查询,主要包罗查询WLAN是否已使能、查询WLAN是否已连接、获取扫描到的热门列表、获取当前连接Wi-Fi的信号强度和添加候选网络配置等。
查询WLAN是否已使能
查询WLAN是否已使能,可以帮助用户快速了解自己是否可以使用Wi-Fi网络举行连接。并且当Wi-Fi跟蜂窝同时存在时,有助于实现网络连接的无缝切换。查询WLAN是否已使能,可以通过以下步骤实现:

  • 导入模块。
    1. import { wifiManager } from '@kit.ConnectivityKit';
    复制代码
  • 使用[isWifiActive()]查询WLAN是否已使能。
  • 如果返回效果为true,则表示WLAN已使能。否则,表示未使能。
核心代码
  1. getWifiStatus() {
  2.   try {
  3.     let isWifiActive = wifiManager.isWifiActive();
  4.     console.info("isWifiActive:" + isWifiActive);
  5.   } catch (error) {
  6.     console.error("failed:" + JSON.stringify(error));
  7.   }
  8. }
复制代码
查询WLAN是否已连接
查询WLAN是否已连接是判定可否通过Wi-Fi 举行各种网络活动的直接方式。只有在 WLAN 连接成功后,用户才气利用 Wi-Fi网络的带宽优势举行诸如高清视频播放、大文件下载、在线游戏等对网络带宽和稳固性要求较高的操纵。查询WLAN是否已连接,可以通过以下步骤实现:

  • 举行“查询WLAN是否已使能”中的步骤1。
  • 使用[isConnected()]查询WLAN是否已连接。
  • 如果返回效果为true,则表示WLAN已连接。否则,表示未连接。
核心代码
  1. getWifiIsConnected() {
  2.   try {
  3.     let ret = wifiManager.isConnected();
  4.     console.info("isConnected:" + ret);
  5.   } catch (error) {
  6.     console.error("failed:" + JSON.stringify(error));
  7.   }
  8. }
复制代码
获取扫描到的热门列表
当用户想连接热门时,就必要通过获取扫描到的热门列表来查找对应热门。获取扫描到的热门列表,可以通过以下步骤实现:

  • 举行“查询WLAN是否已使能”中的步骤1。
  • 使用[getScanInfoList()]获取扫描到的热门列表。
  • 返回的热门列表数组中包罗了每个热门的详细信息[WifiScanInfo]。
核心代码
  1. getScanInfoList() {
  2.   try {
  3.     let scanInfoList = wifiManager.getScanInfoList();
  4.     console.info("scanInfoList:" + JSON.stringify(scanInfoList));
  5.   } catch (error) {
  6.     console.error("failed:" + JSON.stringify(error));
  7.   }
  8. }
复制代码
获取当前连接Wi-Fi的信号强度
在下载大文件或观看高清视频时,如果Wi-Fi信号强度不敷,可能会导致下载速度迟钝、视频卡顿等问题。通过获取信号强度,用户可以初步判定当前网络是否可以大概满足其对速度的需求。获取当前连接Wi-Fi的信号强度,可以通过以下步骤实现:

  • 举行“查询WLAN是否已使能”中的步骤1。
  • 使用[getSignalLevel()]获取当前连接Wi-Fi的信号强度。
  • 返回的信号强度,取值范围为[0, 4],取值越大表示信号越强。
核心代码
  1. getSignalLevel() {
  2.   try {
  3.     let rssi = 0;
  4.     let band = 0;
  5.     let level = wifiManager.getSignalLevel(rssi, band);
  6.     console.info("level:" + JSON.stringify(level));
  7.   } catch (error) {
  8.     console.error("failed:" + JSON.stringify(error));
  9.   }
  10. }
复制代码
添加候选网络配置
添加候选网络配置可以让装备在当前连接的网络出现问题(如信号丢失、网络故障等)或者用户脱离当前网络覆盖范围时,自动实验连接其他预先配置的候选网络。添加候选网络配置,可以通过以下步骤实现:

  • 举行“查询WLAN是否已使能”中的步骤1。
  • 创建config对象,配置候选网络信息。
  • 调用[addCandidateConfig()],并传入config对象,添加候选网络配置。
核心代码
  1. networkListen() {
  2.   this.netCon = connection.createNetConnection();
  3.   this.netCon.register((error: BusinessError) => {
  4.     if (error) {
  5.       console.log('networkListen fail' + JSON.stringify(error))
  6.       return;
  7.     }
  8.   });
  9.   this.netCon.on('netAvailable', (data: connection.NetHandle) => {
  10.     console.info("Succeeded to get netAvailable: " + JSON.stringify(data));
  11.     if (connection.hasDefaultNetSync()) {
  12.       if (this.networkPause) {
  13.         this.controller?.start();
  14.         this.networkPause = false;
  15.       }
  16.     }
  17.   });
  18.   // 订阅网络丢失事件
  19.   this.netCon.on('netLost', (data: connection.NetHandle) => {
  20.     if (connection.getAllNetsSync().length == 0) {
  21.       this.controller?.pause();
  22.       this.networkPause = true;
  23.     }
  24.     console.info("Succeeded to get netLost: " + JSON.stringify(data));
  25.   });
  26.   this.netCon.on('netCapabilitiesChange', (data: connection.NetCapabilityInfo) => {
  27.     console.info("Succeeded to get netCapabilitiesChange: " + JSON.stringify(data));
  28.   });
  29.   this.netCon.on('netUnavailable', () => {
  30.     console.info("Succeeded to get unavailable net event");
  31.   });
  32. }
复制代码
网络状态监听

监听网络可用与丢失

在一样平常使用网络中,当使用Wi-Fi或者蜂窝时,如果信号精良,且手机、电脑、平板等可以顺遂连接到网络,并举行在线视频播放、欣赏网页、下载文件等操纵,这些就是网络可用的典型场景。
而装备故障、信号干扰、网络拥堵、网络服务提供商的服务器故障、维护或升级都可能会导致网络丢失。为了提升用户上网体验,就必要对网络是否可用、网络是否丢失等举行监听,然后做出相应的处置惩罚。
[网络连接管理]中提供了对网络状态监听的方法,开发时定义了相关的监听方法后,在差别场景下会触发差别的变乱,如:


  • [on(‘netAvailable’)]:订阅网络可用变乱,当网络可用时触发该变乱。
  • [on(‘netBlockStatusChange’)]:订阅网络阻塞状态变乱,当网络阻塞时,如网络性能下降、数据传输出现耽误等环境时,会触发该变乱。
  • [on(‘netCapabilitiesChange’)]:订阅网络能力变化变乱,当网络能力变化时,如网络从无网络到有网络、从4G切换到5G时,会触发该变乱。
  • [on(‘netConnectionPropertiesChange’)]:订阅网络连接信息变化变乱,当网络连接信息变化时,如从无网络到有网络、从Wi-Fi切换到蜂窝时,会触发该变乱。
  • [on(‘netLost’)]:订阅网络丢失变乱,当网络严峻中断或正常断开时触发该变乱。
  • [on(‘netUnavailable’)]:订阅网络不可用变乱,当网络不可用时触发该变乱。
网络丢失和网络不可用并非是一个概念,网络丢失和网络不可用的区别如下:


  • 网络丢失是指网络严峻中断或正常断开变乱,当断开Wi-Fi时,是属于正常断开网络连接,会触发[netLost]变乱。
  • 网络不可用是指网络不可用变乱,当连接的网络不能使用时,会触发[netUnavailable]变乱。
在播放视频时,可能会遇到无网络的环境,此时必要监听网络是否可用或者丢失,来实现对视频无网络时暂停、有网络时自动播放的能力,提升用户播放视频时的体验。通过注册监听网络相关变化,注册监听步骤如下:

  • 举行“获取当前网络连接范例”中的步骤1。
  • 调用[connection.createNetConnection()]方法,创建一个网络连接对象。
  • 订阅指定网络状态变化的关照[register()],只有先通过register接口注册了订阅变乱,其他变乱被触发时才气吸取到对应的关照。
  • 订阅网络可用变乱 [on(‘netAvailable’)]。
  • 订阅网络丢失变乱 [on(‘netLost’)]。
  • 订阅网络不可用变乱 [on(‘netUnavailable’)]。
  • 退出页面或应用时取消订阅指定网络状态变化的关照[unregister()]。
核心代码
  1. networkListen() {
  2.   this.netCon = connection.createNetConnection();
  3.   this.netCon.register((error: BusinessError) => {
  4.     if (error) {
  5.       console.log('networkListen fail' + JSON.stringify(error))
  6.       return;
  7.     }
  8.   });
  9.   this.netCon.on('netAvailable', (data: connection.NetHandle) => {
  10.     console.info("Succeeded to get netAvailable: " + JSON.stringify(data));
  11.     if (connection.hasDefaultNetSync()) {
  12.       if (this.networkPause) {
  13.         this.controller?.start();
  14.         this.networkPause = false;
  15.       }
  16.     }
  17.   });
  18.   // 订阅网络丢失事件
  19.   this.netCon.on('netLost', (data: connection.NetHandle) => {
  20.     if (connection.getAllNetsSync().length == 0) {
  21.       this.controller?.pause();
  22.       this.networkPause = true;
  23.     }
  24.     console.info("Succeeded to get netLost: " + JSON.stringify(data));
  25.   });
  26.   this.netCon.on('netCapabilitiesChange', (data: connection.NetCapabilityInfo) => {
  27.     console.info("Succeeded to get netCapabilitiesChange: " + JSON.stringify(data));
  28.   });
  29.   this.netCon.on('netUnavailable', () => {
  30.     console.info("Succeeded to get unavailable net event");
  31.   });
  32. }
复制代码
  1. aboutToDisappear(): void {
  2.   this.netCon?.unregister((error: BusinessError) => {
  3.     console.log(JSON.stringify(error));
  4.   });
  5. }
复制代码
阐明
connection.createNetConnection()方法中有两个可选传入参,netSpecifier和timeout。其中[netSpecifier]指定关注的网络的各项特征;timeout是超时时间(单位是毫秒);netSpecifier是timeout的必要条件,两者都没有则表示关注默认网络。
播放视频可使用[Video]组件实现。
  1. @Component
  2. export struct VideoPlayer{
  3.   private controller:VideoController | undefined;
  4.   @State videoSrc: string= 'https://www.example.com/example.mp4' // 使用时请替换为实际视频加载网址
  5.   build(){
  6.     Column() {
  7.       Video({
  8.         src: this.videoSrc,
  9.         controller: this.controller
  10.       })
  11.     }
  12.   }
  13. }
复制代码
当网络不可用时,调用暂停方法,暂停视频播放。
  1. this.controller?.pause();
复制代码
有网络后,调用播放方法,开始视频播放。
  1. this.controller?.start();
复制代码
上述过程中可能会涉及到Wi-Fi切换,当必要判定Wi-Fi是否切换,必要监听WLAN状态改变变乱和WLAN连接状态改变变乱,步骤如下:

  • 举行“获取当前网络连接范例”中的步骤1和“查询WLAN是否已使能”中的步骤1。
  • 调用[connection.createNetConnection()]方法,创建一个网络连接对象,并指定关注Wi-Fi网络的各项特征。
  • 注册WLAN状态改变变乱[on(‘wifiStateChange’)]。
  • 注册WLAN连接状态改变变乱[on(‘wifiConnectionChange’)]。
核心代码
  1. wifiChangeListen() {
  2.   this.netCon = connection.createNetConnection({
  3.     netCapabilities: {
  4.       bearerTypes: [connection.NetBearType.BEARER_WIFI]
  5.     }
  6.   });
  7.   // 先使用register接口注册订阅事件
  8.   this.netCon.register((error: BusinessError) => {
  9.     console.log(JSON.stringify(error));
  10.   });
  11.   // 订阅网络可用事件。调用register后,才能接收到此事件通知
  12.   this.netCon.on('netAvailable', (data: connection.NetHandle) => {
  13.     console.info("WifiChangeListen-- Succeeded to get data: " + JSON.stringify(data));
  14.   });
  15.   // 订阅网络丢失事件。调用register后,才能接收到此事件通知
  16.   this.netCon.on('netLost', (data: connection.NetHandle) => {
  17.     console.info("WifiChangeListen-- Succeeded to get data: " + JSON.stringify(data));
  18.   });
  19.   let recvPowerNotifyFunc = (result: number) => {
  20.     console.info("WifiChangeListen-- Receive power state change event: " + result);
  21.   }
  22.   let recvWifiConnectionChangeFunc = (result: number) => {
  23.     console.info("WifiChangeListen-- Receive wifi connection change event: " + result);
  24.   }
  25.   // 注册事件
  26.   wifiManager.on("wifiStateChange", recvPowerNotifyFunc);
  27.   wifiManager.on("wifiConnectionChange", recvWifiConnectionChangeFunc);
  28. }
复制代码
其中状态改变变乱的摆列:
摆列值阐明0未激活。1已激活。2激活中。3去激活中。 连接状态改变变乱的摆列:
摆列值阐明0已断开。1已连接。 阐明
装备从无网络到有网络会触发netAvailable变乱、netCapabilitiesChange变乱和[netConnectionPropertiesChange]变乱;
装备从有网络到无网络状态会触发netLost变乱;
装备从Wi-Fi切换到蜂窝会先触发netLost变乱(Wi-Fi丢失),之后触发 netAvailable变乱(蜂窝可用)。
弱网下网络切换

在播放视频时,可能会遇到弱网的环境,如乘坐高铁时、人员麋集的场所等。这个时候必要监听网络状态以及网络质量,来实现提示用户举行网络切换或者对视频的清晰度做出相应调整,如:
1)在Wi-Fi弱信号的环境下,默认网络可能会切换到蜂窝网络。
2)在蜂窝网络弱信号的环境下,默认网络会优先切换到WiFi。
3)在网络质量低的环境下,自动降低并切换视频的清晰度。
判定是否是弱网环境的步骤如下:

  • 导入模块。
  1. import { BusinessError } from '@kit.BasicServicesKit';
  2. import { netQuality } from '@kit.NetworkBoostKit';
复制代码

  • 订阅网络场景信息[on( ‘netSceneChange’)]。
  • 根据网络场景状态变更回调信息中的[Scene]判定是否当前处于弱网环境。
  • 如果处于弱网环境,提示用户切换网络。
核心代码
  1. sceneChangeListen() {
  2.   try {
  3.     netQuality.on('netSceneChange', (list: Array<netQuality.NetworkScene>) => {
  4.       if (list.length > 0) {
  5.         list.forEach((networkScene) => {
  6.           // 回调信息处理
  7.           console.info(`Succeeded receive netSceneChange info`);
  8.           if (networkScene.scene == 'weakSignal' || networkScene.scene == 'congestion') {
  9.             // 表示为弱网场景
  10.             console.info(`The current network is weak`);
  11.             this.networkWeak();
  12.           }
  13.         });
  14.       }
  15.     });
  16.   } catch (err) {
  17.     console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
  18.   }
  19. }
复制代码
  1. networkWeak() {
  2.   promptAction.showToast({
  3.     message: '当前处于弱网环境,建议您切换网络',
  4.     duration: 2000
  5.   });
  6. }
复制代码
判定是否为弱网可以通过下面3种方式:


  • 监听系统实时判决:
    根据网络场景辨认信息,如[NetworkScene.scene]的取值为weakSignal/congestion时,系统直接判决为弱网。
  1. if (networkScene.scene == 'weakSignal' || networkScene.scene == 'congestion' ) {
  2.   // 表示为弱网场景
  3. }
复制代码


  • 监听系统预测判决:
    根据网络场景辨认中的弱信号预测信息,如[NetworkScene.weakSignalPrediction]系统预测即将进入弱网区域。
  1. if (networkScene.weakSignalPrediction) {
  2.   // 弱信号预测处理
  3. }
复制代码


  • 应用自定义判决:
    根据网络质量评估信息,如[NetworkQos],应用自定义门限来判决为弱网。
在弱网环境下,可以使用网络连接迁移能力,在通过系统发起多网迁移(WiFi<->蜂窝,主卡<->副卡等)的过程中,给应用提供连接迁移开始和完成关照,应用可根据连接迁移关照的发起举行重建,给用户带来平滑、高速、低时延的上网体验。

  • 导入模块。
  1. import { BusinessError } from '@kit.BasicServicesKit';
  2. import { netHandover } from '@kit.NetworkBoostKit';
复制代码

  • 订阅连接迁移信息[on( ‘handoverChange’)]。
  • 在连接迁移开始回调、连接迁移完成回调中自定义逻辑代码,处置惩罚相关业务。
核心代码
  1. handoverChangeListen(){
  2.   try {
  3.     netHandover.on('handoverChange', (info: netHandover.HandoverInfo) => {
  4.       if (info.handoverStart) {
  5.         // 连接迁移开始回调,应用按照HandoverStart的建议调整数传策略
  6.         console.info('handover start');
  7.       } else if (info.handoverComplete) {
  8.         // 连接迁移完成回调,应用按照HandoverComplete的建议进行调速和重建恢复
  9.         console.info('handover complete');
  10.       }
  11.     });
  12.   } catch (err) {
  13.     console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
  14.   }
  15. }
复制代码
视频播放时,还可以通过判定当前网络质量来对视频的清晰度举行调整。若网络质量低,则切换视频到较低的清晰度。

  • 导入模块。
  1. import { BusinessError } from '@kit.BasicServicesKit';
  2. import { netQuality } from '@kit.NetworkBoostKit';
复制代码

  • 订阅网络质量信息[on( ‘netQosChange’)]。
  • 根据网络质量回调信息[NetworkQos]中的效果,如通过数据传输的链路范例、上下行实时带宽信息、上下行实时速率、RTT时延等信息自定义门限来区分网络质量高低。
  • 根据网络质量高低的效果,举行视频清晰度切换。
核心代码
  1. netQualityListen() {
  2.   try {
  3.     netQuality.on('netQosChange', (list: Array<netQuality.NetworkQos>) => {
  4.       if (list.length > 0) {
  5.         list.forEach((qos) => {
  6.           // 回调信息处理
  7.           console.info(`Succeeded receive netQosChange info`);
  8.           let lowNetQuality: boolean = false;
  9.           // 根据网络质量的相关信息,判断当前网络质量的高低。此处逻辑需要自定义实现,如果是低质量,则lowNetQuality为true。
  10.           // 如果网络质量低,则切换视频清晰度。
  11.           if(lowNetQuality){
  12.             this.toggleLowDefinition();
  13.           }
  14.         });
  15.       }
  16.     });
  17.   } catch (err) {
  18.     console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
  19.   }
  20. }
复制代码
  1. toggleLowDefinition(){
  2.   this.innerResource = 'https://www.example.com/example_low_definition.mp4';
  3. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

悠扬随风

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表