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)
      }
    });
  }
}
相关推荐
雪芽蓝域zzs25 分钟前
鸿蒙Next开发 获取APP缓存大小和清除缓存
缓存·华为·harmonyos
Robot2514 小时前
「华为」人形机器人赛道投资首秀!
大数据·人工智能·科技·microsoft·华为·机器人
鸿蒙布道师4 小时前
鸿蒙NEXT开发动画案例5
android·ios·华为·harmonyos·鸿蒙系统·arkui·huawei
小诸葛的博客12 小时前
华为ensp实现跨vlan通信
网络·华为·智能路由器
康康这名还挺多14 小时前
鸿蒙HarmonyOS list优化一: list 结合 lazyforeach用法
数据结构·list·harmonyos·lazyforeach
晚秋大魔王17 小时前
OpenHarmony 开源鸿蒙南向开发——linux下使用make交叉编译第三方库——nettle库
linux·开源·harmonyos
python算法(魔法师版)21 小时前
.NET 在鸿蒙系统上的适配现状
华为od·华为·华为云·.net·wpf·harmonyos
bestadc1 天前
鸿蒙 UIAbility组件与UI的数据同步和窗口关闭
harmonyos
枫叶丹41 天前
【HarmonyOS Next之旅】DevEco Studio使用指南(二十二)
华为·harmonyos·deveco studio·harmonyos next
ax一号街阿楠1 天前
华为FAT AP配置 真机
网络·华为·智能路由器