HarmonyOS鸿蒙学习笔记(23)监听Wifi状态变化

前言

本篇博文通过动态订阅公共事件来说明怎么使用HarmonyOS监听Wifi状态的变化。关于动态订阅公共事件的概念,官网有详细说明,再次就不在赘述。博文相关项目源码地址传送门。公共事件的监听需要通过订阅和注销两步。
在这里插入图片描述

创建接收状态变化的Bean对象

该对象主要用来存储Wifi当前的状态,比如是否已经链接、是否断开等。同时该Bean对象还定义了一个subscriber用来保持订阅者,用来执行订阅和注销


export class CommonEventBean {
   
  //省略部分代码
  /**
   * The state of common events.
   */
  state: Resource = $r('app.string.event_init_state');
  //保存订阅者对象
  subscriber: any = null;
}

创建订阅者和订阅事件

监听Wifi变化,需要先调用CommonEventManager.createSubscriber创建订阅者,保存返回的订阅者对象subscriber,用于执行后续的订阅、退订等操作。下面看看就看具体怎么来监听Wifi变化的:

 /**
 @param commonEventItem 保存状态的Bean对象
 @
 */
 subscribe(commonEventItem: CommonEventBean, callback: Function): void {
   
    let toastMsg: Resource;
    let commonEvent = commonEventItem;
    //创建需要订阅的事件,此处为CONN_STATE
    const subscribeInfo = {
   
      events: [CommonConstants.CONN_STATE]
    };
    //创建订阅者
    CommonEventManager.createSubscriber(subscribeInfo, (err, subscriber) => {
   
      if (err) {
   
        toastMsg = $r('app.string.subscribe_fail');
        //创建订阅失败:执行回调,刷新相关UI
        callback(commonEvent, toastMsg);
        return;
      }
      // 创建订阅者失败:执行回调,刷新相关UI
      if (subscriber === null) {
   
        toastMsg = $r('app.string.need_subscriber');
        callback(commonEvent, toastMsg);
        return;
      }
      //保存订阅者,用来后面的注销操作
      commonEvent.subscriber = subscriber;
      //通过订阅者subscriber 执行订阅 
      //订阅回调函数返回的data内包含了公共事件的名称、发布者携带的数据等信息
      CommonEventManager.subscribe(subscriber, (err, data) => {
   
        if (err) {
   
          //订阅失败:执行回调,刷新相关UI
          toastMsg = $r('app.string.subscribe_fail');
          callback(commonEvent, toastMsg);
          return;
        }
      
        let connState: string | undefined = data?.data;
        if (connState === undefined) {
   
          return;
        }
        //变量当前Wifi状态
        switch (connState) {
   
          case WifiState.CONNECTING:
            commonEvent.state = '连接中';
            break;
          case WifiState.DISCONNECTED:
            commonEvent.state = '已断开';
            break;
          case WifiState.DISCONNECTING:
            commonEvent.state = '正在断开';
            break;
          case WifiState.UNKNOWN_STATE:
            commonEvent.state = '未知状态';
            break;
          case WifiState.AP_CONNECTED:
            commonEvent.state = '已连接';
            break;
          default:
            break;
        }
        //执行回调,刷新相关UI
        callback(commonEvent);
      })
      toastMsg = $r('app.string.subscribe_success');
       //执行回调,刷新相关UI
      callback(commonEvent, toastMsg);
    })
  }

参考资料:

系统公共事件(ArkTS)
动态订阅公共事件
源码地址

相关推荐

  1. uniapp监听wifi连接状态

    2024-01-27 14:52:04       36 阅读
  2. harmonyOS学习笔记状态修饰器@state,@prop,@link

    2024-01-27 14:52:04       33 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-27 14:52:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-27 14:52:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-27 14:52:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-27 14:52:04       20 阅读

热门阅读

  1. react-jss书写样式

    2024-01-27 14:52:04       37 阅读
  2. docker基础

    2024-01-27 14:52:04       35 阅读
  3. GBASE南大通用分享:clickhouse-Merge Tree原理解析

    2024-01-27 14:52:04       35 阅读
  4. SpringMVC RESTful风格

    2024-01-27 14:52:04       34 阅读
  5. STL标准库(三)序列容器之list

    2024-01-27 14:52:04       35 阅读
  6. PMM深入研究:如何自定义配置和集成到外部grafana

    2024-01-27 14:52:04       36 阅读
  7. Unity 中的接口和继承

    2024-01-27 14:52:04       28 阅读
  8. Spring中的以Aware结尾的接口是做什么的?

    2024-01-27 14:52:04       35 阅读
  9. 数据结构与算法面试系列-01

    2024-01-27 14:52:04       31 阅读