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

news2024/11/16 17:39:54

监听Wifi状态变化

  • 前言
  • 创建接收状态变化的Bean对象
  • 创建订阅者和订阅事件
  • 参考资料:

前言

本篇博文通过动态订阅公共事件来说明怎么使用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)
动态订阅公共事件
源码地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1411280.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UE5 Chaos系统 学习笔记

记得开插件: 1、锚点场 在锚点场范围内的物体静止且不被其他力场损坏 2、ClusterStrain 破裂效果的力 3、DisableField chaos破裂后的模拟物理在绿色范围内禁止模拟物理 4、ForceAndStrain 破裂效果的力 5、ForceAndStrainFallOff 破裂效果的力,但是…

代码随想录算法训练营第十一天 | 二叉树基础

代码随想录算法训练营第十一天 | 二叉树基础 文章目录 代码随想录算法训练营第十一天 | 二叉树基础1 二叉树的理论基础1.1 二叉树的类型1.2 二叉树的存储方式1.3 二叉树的遍历方式1.4 二叉树的定义 2 二叉树的递归遍历2.1 前序遍历2.2 中序遍历2.3 后序遍历 3 二叉树的迭代遍历…

【QT+QGIS跨平台编译】之十:【libbz2+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、libbz2介绍二、文件下载三、文件分析四、pro文件五、编译实践一、libbz2介绍 bzip2是一个基于Burrows-Wheeler 变换的无损压缩软件,压缩效果比传统的LZ77/LZ78压缩算法来得好。它是一款免费软件。可以自由分发免费使用。 bzip2能够进行高质量的数据压缩。它利用…

SpringBoot-yml文件的配置与读取

配置 值前边必须要有空格,作为分隔符 使用空格作为缩进表示层级关系,相同的层级左侧对齐 获取 使用Value(”${键名}”) 使用ConfigurationProperties(prefix "前缀") 1.前缀要与yml配置文件中的前缀一致 2.实体类的字段名与配置文件中的键名一…

linux conda 配置 stable video diffusion

安装教程 1 下载仓库源码 git clone https://github.com/Stability-AI/generative-models.git2 创建conda环境 conda create -n svd python3.10 conda activate svd3 安装pytorch gpu cuda和cudnn请参考其他链接配置,使用 conda 或者 pip 安装 pytorch # 使用c…

第二集《闻法仪轨》

请大家打开讲义第三面,甲二、于法、法师发起承事。 我们身为一个大乘的佛弟子,我们这一念明了的心,在一生当中,会遇到很多很多的佛法,也会遇到很多很多的法师,但不是所有的法师跟佛法对我们都是帮助的&…

EasyCVR视频智能监管系统方案设计与应用

随着科技的发展,视频监控平台在各个领域的应用越来越广泛。然而,当前的视频监控平台仍存在一些问题,如视频质量不高、监控范围有限、智能化程度不够等。这些问题不仅影响了监控效果,也制约了视频监控平台的发展。 为了解决这些问…

HCIA——29HTTP、万维网、HTML、PPP、ICMP;万维网的工作过程;HTTP 的特点HTTP 的报文结构的选择、解答

学习目标: 计算机网络 1.掌握计算机网络的基本概念、基本原理和基本方法。 2.掌握计算机网络的体系结构和典型网络协议,了解典型网络设备的组成和特点,理解典型网络设备的工作原理。 3.能够运用计算机网络的基本概念、基本原理和基本方法进行…

Javaweb之SpringBootWeb案例之阿里云OSS服务入门的详细解析

2.3.2 入门 阿里云oss 对象存储服务的准备工作我们已经完成了,接下来我们就来完成第二步操作:参照官方所提供的sdk示例来编写入门程序。 首先我们需要来打开阿里云OSS的官方文档,在官方文档中找到 SDK 的示例代码: 参照官方提供…

爬取第一试卷网高三数学试卷并下载到本地

import requests import re import os filename 试卷\\ if not os.path.exists(filename):os.mkdir(filename) url https://www.shijuan1.com/a/sjsxg3/list_727_1.html headers {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.…

【QT+QGIS跨平台编译】之九:【LZ4+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、LZ4介绍二、文件下载三、文件分析四、pro文件五、编译实践一、LZ4介绍 LZ4是一种无损压缩算法,压缩速度为每核心400MB/s。 LZ4是目前效率最高的压缩算法,更加侧重于压缩/解压缩速度,压缩比并不突出,本质上就是时间换空间。 LZ4库是使用BSD许可证作为开放源码…

Dockerfile里ADD * 保留原来的目录结构

1、问题 给新模块写Dockerfile,很多静态资源分散在各个目录,于是Dockerfile里我直接一句: ADD ./* /dest/镜像出来后,启动容器,进入容器种后发现:文件拷贝成功,但原来的目录结构都不在了&…

HCIE之BGP正则表达式(四)

BGP 一、AS-Path正则表达式数字| 等同于或的关系[]和.$ 一个字符串的结束_代表任意^一个字符串的开始()括号包围的是一个组合\ 转义字符* 零个或多个?零个或一个一个或多个 二、BGP对等体组 一、AS-Path正则表达式 正则表达式是按照一定模版匹配字符串的公式 AR3上…

Java面试题(6)

28.创建线程池有哪几种方式 newFixedThreadPool(int nThreads) :创建一个固定长度的线程池,如果有线程发生错误而结束, 线程池会补充一个新线程。 newCachedThreadPool() :创建一个可缓存的线程池,会自动回收和创建空…

小黑艰难的前端啃bug之路:内联元素之间的间隙问题

今天开始学习前端项目&#xff0c;遇到了一个Bug调了好久&#xff0c;即使margin为0&#xff0c;但还是有空格。 小黑整理&#xff0c;用四种方法解决了空白问题 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></tit…

关于达梦认证DCA DCP,TIDB认证PCTA PCTP考试那点事儿

文章最后有彩蛋&#xff0c;一定要看到最后... 一、正确的道路上遇到正确的你 伴随中国数据库领域的快速技术进步&#xff0c;国内数据库生态蓬勃发展&#xff0c;并不断涌现出极具创新力的产品&#xff0c;推动了数据库应用的遍地开花。截至2024年1月&#xff0c;墨天轮数据社…

基于 MQTT 的开源桥接器:自由控制物联网设备 | 开源日报 No.151

Koenkk/zigbee2mqtt Stars: 10.5k License: GPL-3.0 Zigbee2MQTT 是一个 Zigbee &#x1f41d; 到 MQTT 桥接器 &#x1f309;&#xff0c;可以摆脱专有的 Zigbee 桥接器 &#x1f528; 允许您在不使用供应商桥接器或网关的情况下使用 Zigbee 设备通过 MQTT 桥接事件并控制 Z…

目标检测数据集 - 车辆检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍&#xff1a;车辆检测数据集&#xff0c;真实场景高质量图片数据&#xff0c;涉及场景丰富&#xff0c;比如城市道路车辆、高速道路车辆、农村道路车辆、车辆遮挡、车辆严重遮挡数据等&#xff0c;且类别丰富&#xff0c;划分为 "Ambulance"、"Bus&qu…

工业4.0开放平台通信 统一架构OPC UA的一种测试方法

工业4.0和工业物联网&#xff08;Industrial Internet of Things, IIoT&#xff09;的核心挑战在于设备、机器以及来自不同行业服务之间的安全和标准化的数据和信息交换。 2016年11月工业4.0平台发布了指导纲要《工业4.0产品需要实现哪些准则》&#xff0c;即对于所有位于工业…

C语言的模型玩具:结构体的使用以及操作符优先级

各位少年&#xff0c;大家好&#xff0c;我是博主那一脸阳光&#xff0c;今天分享结构体的使用&#xff0c;声明以及操作符的使用。 前言&#xff1a; 如果你想做一块月饼&#xff0c;你要学习它的制作方法&#xff0c;需要准备面粉&#xff0c;白砂糖&#xff0c;奶粉&…