HarmonyOS NEXT——【鸿蒙监听网络状态变化】

当在鸿蒙应用中,网络状态发生变化,我们需要实现监听网络状态的变化,做出相对应的提示,比如退出登录或者退出应用之类的操作。那么我们需要监听当前网络的状态,以下是我封装的代码提供参考:

效果:

参考代码:

TypeScript 复制代码
import { connection } from '@kit.NetworkKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { CommonConstants } from '../constants/CommonConstants';
import { JumpTool } from '.';
import { DialogContents, H5ShowCommonDialog } from '../../view/H5CommonDialog';
import { WindowUtils } from '../constants/WindowUtils';
import { LoginTool } from './LoginTool';
import Logger from './Logger';
​
export class ListenNetworkState {
  private static oldNetType: string | null = null
  private static newNetType: string | null = null
​
  /**
   *  获取旧网络
   * @param
   * @returns
   */
  static async getOldNet() {
    connection.getDefaultNet().then((netHandle: connection.NetHandle) => {
      if (netHandle.netId == 0) {
        // 当前没有已连接的网络时,获取的netHandler的netid为0,属于异常场景,此处可以实际情况自行添加一些处理机制。
        return;
      }
      connection.getNetCapabilities(netHandle, (error: BusinessError, data: connection.NetCapabilities) => {
        if (error) {
          return;
        }
        // Logger.info("Succeeded to get data: " + JSON.stringify(data));
        if (data.bearerTypes[0] == 0) {
          ListenNetworkState.oldNetType = '蜂窝网络'
          // promptAction.showToast({ message: '蜂窝网络' })
        }
        if (data.bearerTypes[0] == 1) {
          ListenNetworkState.oldNetType = 'Wi-Fi网络'
          // promptAction.showToast({ message: 'Wi-Fi网络' })
        }
      })
    }).catch((error: BusinessError) => {
    });
  }
​
  /**
   * 监听网络是否变化
   * @param
   * @returns true 变化 false 无变化
   */
  static async listenNetwork() {
    let isNetworkChanged = false;
    await ListenNetworkState.getOldNet();
    let currentNet = connection.createNetConnection();
    currentNet.register((error) => {
      if (error) {
        // Logger.info('订阅失败' + JSON.stringify(error));
      } else {
        // Logger.info('订阅成功' + JSON.stringify(error));
      }
    });
​
    //网络切换时
    currentNet.on("netCapabilitiesChange", (data) => {
      if (data.netCap.bearerTypes[0] == 0) {
        ListenNetworkState.newNetType = '蜂窝网络';
      }
      if (data.netCap.bearerTypes[0] == 1) {
        ListenNetworkState.newNetType = 'Wi-Fi网络';
      }
      if (ListenNetworkState.oldNetType !== ListenNetworkState.newNetType) {
        if (CommonConstants.ISLOGIN) {
          LoginTool.logOut(false, false)
​
          let context: DialogContents = {
            title: "提示",
            message: '网络发生变化,已退出登录',
            confirms: () => {
              WindowUtils.getRouter().pushUrl({ url: 'pages/login/LoginPwdPage' })
            }
          }
          H5ShowCommonDialog(context)
        }
        ListenNetworkState.oldNetType = ListenNetworkState.newNetType
      }
    });
​
    //无网络切换到有网络时
    currentNet.on("netAvailable", (data) => {
​
      if (CommonConstants.ISLOGIN) {
        LoginTool.logOut(false, false)
​
        let context: DialogContents = {
          title: "提示",
          message: '网络发生变化,已退出登录',
          confirms: () => {
            WindowUtils.getRouter().pushUrl({ url: 'pages/login/LoginPwdPage' })
          }
        }
        H5ShowCommonDialog(context)
      }
    });
  }
}
相关推荐
李&@杰1 小时前
交换机PoE供电不足导致AP反复重启故障处理
网络·华为
特立独行的猫a1 小时前
用仓颉写桌面应用的“薄壳框架”cj-tauri ,以及它的 AI 对话客户端 ai-chat
人工智能·harmonyos·tauri·仓颉·鸿蒙pc·cj-tarui·ai客户端
万物智能信息科技3 小时前
Zigbee透传驱动开发—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
驱动开发·华为·开源·harmonyos·鸿蒙
牛哥带你学代码3 小时前
鸿蒙远程控制电脑最新体验:华为荣耀鸿蒙用户2026远控软件选择指南
华为·电脑·harmonyos
2501_944525763 小时前
开源鸿蒙平台 KMP_CMP 三方库「Multik」适配全流程
华为·开源·harmonyos
特立独行的猫A17 小时前
10 MB 的桌面 AI 客户端:用仓颉 + 系统 WebView 替代 Electron
前端·harmonyos
SZYSK21 小时前
鸿蒙人脸识别算法放在终端里:和外挂授权 SDK 差在排障路径
物联网·算法·华为·harmonyos
贾伟康21 小时前
【健康菜谱助手|06】HarmonyOS ArkTS 烹饪计时器实战:处理倒计时、暂停、恢复和到期反馈
软件测试·移动开发·harmonyos·arkts·arkui
贾伟康1 天前
【健康菜谱助手|05】HarmonyOS ArkTS 购物清单实战:去重食材并同步勾选、数量与清空动作
软件测试·移动开发·harmonyos·arkts·arkui
特立独行的猫a1 天前
仓颉语言cj-tauri 跨端开发框架实战:给鸿蒙侧加一个「读设备电量」的原生能力
ui·harmonyos·tauri·1024程序员节·仓颉·鸿蒙pc