当前位置: 首页 > news >正文

鸿蒙:创建公共事件、订阅公共事件和退订公共事件

1. 前言

想获取电量过低的状态、电池充电或断电状态、屏幕解锁或锁定等公共事件时,我们可以通过commonEventManager 接口实现相关能力。

2. 参考文档

https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-commoneventmanagerhttps://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-commoneventmanager

https://developer.huawei.com/consumer/cn/doc/harmonyos-references/commoneventmanager-definitionshttps://developer.huawei.com/consumer/cn/doc/harmonyos-references/commoneventmanager-definitions

nullhttps://developer.huawei.com/consumer/cn/doc/harmonyos-guides/common-event-subscription

3. 核心思路

  1. 创建订阅信息
  2. 订阅公共事件
  3. 取消订阅

4. 核心代码

// 创建订阅
createSubscriber(): void {// 订阅者信息:配置需要监听的公共事件let subscribeInfo: commonEventManager.CommonEventSubscribeInfo = {events: ['usual.event.POWER_CONNECTED', // 设备充电事件'usual.event.BATTERY_LOW',// 电池低电量事件],};// 1. 创建订阅者commonEventManager.createSubscriber(subscribeInfo,(err: BusinessError, subscriber: commonEventManager.CommonEventSubscriber) => {if (err) {hilog.error(DOMAIN_NUMBER, TAG, `创建订阅者失败: ${err.message}`);return;}this.showDialog("创建订阅成功")hilog.info(DOMAIN_NUMBER, TAG, 'Succeeded in creating subscriber.');// 【关键】保存订阅者对象到成员变量,后续取消订阅需用到它this.subscriber = subscriber;});
}// 订阅事件
subscribe(): void {commonEventManager.subscribe(this.subscriber, (subErr, eventData) => {if (subErr) {hilog.error(DOMAIN_NUMBER, TAG, `订阅事件失败: ${subErr.message}`);return;}this.showDialog(`订阅事件触发成功:${JSON.stringify(eventData)}`)hilog.info(DOMAIN_NUMBER, TAG, `事件触发成功!数据: ${JSON.stringify(eventData)}`);});
}// 取消订阅事件
unsubscribe(): void {if (this.subscriber !== null) {commonEventManager.unsubscribe(this.subscriber, (err: BusinessError) => {if (err) {hilog.error(DOMAIN_NUMBER, TAG, `取消订阅失败: ${err.message}`);return;}this.showDialog("取消订阅成功")hilog.info(DOMAIN_NUMBER, TAG, '成功取消订阅事件');});}
}

5. 完整代码

Index.ets

import { BusinessError, commonEventManager } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';const TAG: string = 'ProcessModel';
const DOMAIN_NUMBER: number = 0xFF00;@Entry
@ComponentV2
struct Index {// 【关键】将订阅者对象提升为组件成员变量,供“取消订阅”时使用private subscriber: commonEventManager.CommonEventSubscriber | null = null;// 弹窗showDialog(mes: string): void {this.getUIContext().showAlertDialog({ message: mes })}// 创建订阅createSubscriber(): void {// 订阅者信息:配置需要监听的公共事件let subscribeInfo: commonEventManager.CommonEventSubscribeInfo = {events: ['usual.event.POWER_CONNECTED', // 设备充电事件'usual.event.BATTERY_LOW',// 电池低电量事件],};// 1. 创建订阅者commonEventManager.createSubscriber(subscribeInfo,(err: BusinessError, subscriber: commonEventManager.CommonEventSubscriber) => {if (err) {hilog.error(DOMAIN_NUMBER, TAG, `创建订阅者失败: ${err.message}`);return;}this.showDialog("创建订阅成功")hilog.info(DOMAIN_NUMBER, TAG, 'Succeeded in creating subscriber.');// 【关键】保存订阅者对象到成员变量,后续取消订阅需用到它this.subscriber = subscriber;});}// 订阅事件subscribe(): void {commonEventManager.subscribe(this.subscriber, (subErr, eventData) => {if (subErr) {hilog.error(DOMAIN_NUMBER, TAG, `订阅事件失败: ${subErr.message}`);return;}this.showDialog(`订阅事件触发成功:${JSON.stringify(eventData)}`)hilog.info(DOMAIN_NUMBER, TAG, `事件触发成功!数据: ${JSON.stringify(eventData)}`);});}// 取消订阅事件unsubscribe(): void {if (this.subscriber !== null) {commonEventManager.unsubscribe(this.subscriber, (err: BusinessError) => {if (err) {hilog.error(DOMAIN_NUMBER, TAG, `取消订阅失败: ${err.message}`);return;}this.showDialog("取消订阅成功")hilog.info(DOMAIN_NUMBER, TAG, '成功取消订阅事件');});}}build() {Column({ space: 150 }) {Text("公共事件订阅示例").fontSize(20)Column({ space: 20 }) {Button("1、创建订阅事件").onClick((event: ClickEvent) => {this.createSubscriber();})Button("2、订阅事件").onClick((event: ClickEvent) => {this.subscribe();this.showDialog("订阅成功")})Button("3、取消订阅事件").onClick((event: ClickEvent) => {this.unsubscribe();})}}.height("100%").width("100%").justifyContent(FlexAlign.Center)}
}

6. 运行效果

7. 完整代码

Index.ets

import { BusinessError, commonEventManager } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';const TAG: string = 'ProcessModel';
const DOMAIN_NUMBER: number = 0xFF00;@Entry
@ComponentV2
struct Index {// 【关键】将订阅者对象提升为组件成员变量,供“取消订阅”时使用private subscriber: commonEventManager.CommonEventSubscriber | null = null;// 弹窗showDialog(mes: string): void {this.getUIContext().showAlertDialog({ message: mes })}// 创建订阅createSubscriber(): void {// 订阅者信息:配置需要监听的公共事件let subscribeInfo: commonEventManager.CommonEventSubscribeInfo = {events: ['usual.event.POWER_CONNECTED', // 设备充电事件'usual.event.BATTERY_LOW',// 电池低电量事件],};// 1. 创建订阅者commonEventManager.createSubscriber(subscribeInfo,(err: BusinessError, subscriber: commonEventManager.CommonEventSubscriber) => {if (err) {hilog.error(DOMAIN_NUMBER, TAG, `创建订阅者失败: ${err.message}`);return;}this.showDialog("创建订阅成功")hilog.info(DOMAIN_NUMBER, TAG, 'Succeeded in creating subscriber.');// 【关键】保存订阅者对象到成员变量,后续取消订阅需用到它this.subscriber = subscriber;});}// 订阅事件subscribe(): void {commonEventManager.subscribe(this.subscriber, (subErr, eventData) => {if (subErr) {hilog.error(DOMAIN_NUMBER, TAG, `订阅事件失败: ${subErr.message}`);return;}this.showDialog(`订阅事件触发成功:${JSON.stringify(eventData)}`)hilog.info(DOMAIN_NUMBER, TAG, `事件触发成功!数据: ${JSON.stringify(eventData)}`);});}// 取消订阅事件unsubscribe(): void {if (this.subscriber !== null) {commonEventManager.unsubscribe(this.subscriber, (err: BusinessError) => {if (err) {hilog.error(DOMAIN_NUMBER, TAG, `取消订阅失败: ${err.message}`);return;}this.showDialog("取消订阅成功")hilog.info(DOMAIN_NUMBER, TAG, '成功取消订阅事件');});}}build() {Column({ space: 150 }) {Text("公共事件订阅示例").fontSize(20)Column({ space: 20 }) {Button("1、创建订阅事件").onClick((event: ClickEvent) => {this.createSubscriber();})Button("2、订阅事件").onClick((event: ClickEvent) => {this.subscribe();this.showDialog("订阅成功")})Button("3、取消订阅事件").onClick((event: ClickEvent) => {this.unsubscribe();})}}.height("100%").width("100%").justifyContent(FlexAlign.Center)}
}

觉得有用可以点赞或收藏

http://www.dtcms.com/a/486865.html

相关文章:

  • 鸿蒙NEXT Function Flow Runtime开发指南:掌握下一代并发编程
  • 遥控器外壳设计网站推荐哈尔滨建设信息网官网
  • 哈夫曼树 红黑树 B树 B+树 WTF!M3?(树形查找)
  • 【Linux内核】DMABUF 与文件描述符(fd)的绑定过程
  • AngularJS 模型
  • 网页设计与网站建设毕业设计成全看免费观看
  • MySQL数据库操作全指南(一)
  • 【项目】年会抽奖系统
  • 烟台建站程序如何用电脑主机做网站
  • Spring Boot 统一异常处理机制:设计原理与最佳实践
  • 【jenkins】构建安卓
  • Spring Boot 集成 SpringDoc OpenAPI(Swagger)实战:从配置到接口文档落地
  • 基于目标信息最大化的高分辨率雷达波形设计——论文阅读
  • 网站建设毕业答辩ppt模板顶尖网站建设
  • MCP传输模式选择指南:Stdio与HTTP的终极对比
  • 网站建设实习招聘wordpress 问卷调查
  • 效果图制作网站有哪些医院网站制作公司
  • MySQL 连接类型介绍
  • 网站开发编程入门学习网站设计要考虑的因素
  • sk09.【scikit-learn基础】--『无监督学习』之K均值聚类
  • 网站建设对于企业的意义wordpress上传网页
  • OFD转PDF技术方案:快速实现一键批量转换
  • 网站页面布局模板电商网站系统建设考试
  • 【完整源码+数据集+部署教程】 【运动的&足球】足球场景目标检测系统源码&数据集全套:改进yolo11-ASF-P2
  • 免费发布信息网站网址大全网站做cnzz流量统计
  • 手机群控软件实现多设备监控与测试的技术解析
  • 自定义Spring Boot Starter项目并且在其他项目中通过pom引入使用
  • 做网站后台系统的规范为什么会显示危险网站
  • [tile-lang] docs | 基准测试 | GEMM示例
  • 网站开发培训收费邯郸外贸网站建设