本文介绍: HarmonyOS 监听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)
动态订阅公共事件
源码地址

原文地址:https://blog.csdn.net/chunqiuwei/article/details/135836831

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_62707.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注