HarmonyOS App开发——鸿蒙公共事件App开发

1 公共事件的开发

1.1 公共事件订阅开发

当需要订阅某个公共事件,获取某个公共事件传递的参数时,可以创建一个订阅者对象,用于作为订阅公共事件的载体,订阅公共事件并获取公共事件传递而来的参数。订阅部分系统公共事件需要先申请权限。

公共事件订阅开发接口如下:

(1)创建订阅者对象(callback):

createSubscriber(subscribeInfo: CommonEventSubscribeInfo, callback:AsyncCallback)。

(2)创建订阅者对象(promise):

createSubscriber(subscribeInfo: CommonEventSubscribeInfo)。

(3)订阅公共事件:

subscribe(subscriber: CommonEventSubscriber, callback: AsyncCallback)。

1.2 公共事件发布开发

当需要发布某个自定义公共事件时,可以通过此方法发布事件。发布的公共事件可以携带数据,供订阅者解析并进行下一步处理。

公共事件发布开发接口如下:

(1)发布公共事件:

publish(event: string, callback: AsyncCallback)。

(2)指定发布信,息并发布公共事件:

publish(event: string,options:CommonEventPublishData,callback: AsyncCallback)。

1.3 公共事件取消订阅开发

订阅者需要取消已订阅的某个公共事件时,可以通过此方法取消订阅事件。公共事件取消订阅开发接口如下:

取消阅公共事件:

unsubscribe(subscriber:CommonEventSubscriber,callback?:ASyncCallback)。

2 实战:公共事件App(订阅、发布、取消)

本文主要演示如何实现公共事件APP的订阅、发布和取消操作。

打开DevEco Studio,选择一个Empry Abliy工程模板,创建工程代码。

2.1 添加按钮

在Index.ets的Text组件下,添加4个按钮,代码如下:

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| // 导入公共事件管理器 import commonEventManager from '@ohos.commonEventManager'; @Entry @Component struct Index { @State message: string = '公共事件APP' // 用于接收事件数据 @State eventData: string = '' // 用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作 private subscriber: commonEventManager.CommonEventSubscriber | null = null ; build() { Row() { Column() { Text(this .message) .fontSize(25) .fontWeight(FontWeight.Bold) // 创建订阅者 Button(('创建订阅者'), { type: ButtonType.Capsule }) .fontSize(40) .fontWeight(FontWeight.Medium) .margin({ top: 10, bottom: 10 }) .onClick(() => { this .createSubscriber() }) // 订阅事件 Button(('订阅事件'), { type: ButtonType.Capsule }) .fontSize(40) .fontWeight(FontWeight.Medium) .margin({ top: 10, bottom: 10 }) .onClick(() => { this .subscriberCommonEvent() }) // 发送事件 Button(('发送事件'), { type: ButtonType.Capsule }) .fontSize(40) .fontWeight(FontWeight.Medium) .margin({ top: 10, bottom: 10 }) .onClick(() => { this .publishCommonEvent() }) // 发送事件 Button(('取消订阅'), { type: ButtonType.Capsule }) .fontSize(40) .fontWeight(FontWeight.Medium) .margin({ top: 10, bottom: 10 }) .onClick(() => { this .unsubscribeCommonEvent() }) } .width('100%') } .height('100%') } } |

其中4个按钮分别设置了onClick单击事件,分别用来触发创建订阅者、订阅事件、

发送事件以及取消订阅的操作。

界面效果如图所示:

2.2 添加Text组件显示接收的事件

为了能显示接收到的事件的信息,在4个按钮下面添加一个Text组件,代码如下:

|--------------------------------------------------------------------------------------------------------------------------------|
| // 用于接收事件数据 @State eventData: string = '' // 接收到的事件数据 Text(this .eventData) .fontSize(25) .fontWeight(FontWeight.Bold) |

Text组件的显示内容,通过@State绑定了eventData变量。当evenData变量变化时,Text的显示内容也会实时更新。

2.3 设置按钮单击事件方法

4个按钮的单击事件方法如下:

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| // 用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作 private subscriber: commonEventManager.CommonEventSubscriber | null = null ; private createSubscriber() { if (this .subscriber) { this .message = "订阅者已创建"; } else { commonEventManager.createSubscriber({ // 创建订阅者 events: "testEvent" // 指定订阅的事件名称 }, (err, subscriber) => { // 创建结果的回调 if (err) { this .message = "创建订阅者失败" } else { this .subscriber = subscriber; // 创建订阅成功 this .message = "创建订阅者成功"; } }) } } private subscriberCommonEvent() { if (this .subscriber) { // 根据创建的subscriber开始订阅事件 commonEventManager.subscribe(this .subscriber, (err, data) => { if (err) { // 异常处理 this .eventData = "订阅事件失败: " + err; } else { // 接收到事件 this .eventData = "订阅事件成功: " + JSON.stringify(data); } }) } else { this .message = "请先创建订阅者"; } } private publishCommonEvent() { // 发布公共事件 commonEventManager.publish("testEvent", (err) => { // 结果回调 if (err) { this .message = "发送公共事件失败: " + err; } else { this .message = "发布带有数据的公共事件成功"; } }) } private unsubscribeCommonEvent() { if (this .subscriber) { commonEventManager.unsubscribe(this .subscriber, (err) => { // 取消订阅事件 if (err) { this .message = "取消订阅事件失败: " + err; } else { this .subscriber = null ; this .message = "取消订阅事件成功"; } }) } else { this .message = "已经订阅"; } } |

subscriber是作为订阅者的变量。createSubscriber()方法用于创建订阅者。subscriberCommonEvent方法用于订阅事件。publishCommonEvent()方法用于发布公共事件。unsubscribeCommonEvent()方法用于取消订阅。

2.4 运行

"创建订阅者"界面效果如图所示:

单击"订阅事件"以及"发送事件"按钮后,界面效果如图所示:

单击"取消订阅"按钮后,界面效果如图所示:

由图中可以看到,订阅者已经能够正确接收事件,并将事件的信息显示在页面上了。这样可以实现应用与系统之间,应用与应用之间的数据传递。

3 小结

本文围绕鸿蒙公共事件开发展开,系统讲解了订阅、发布、取消订阅三大核心能力及实战案例,突出鸿蒙公共事件"跨应用/系统数据传递"的简单易用特性,助力开发者快速掌握分布式通信关键技能。

相关推荐
一水鉴天8 分钟前
统一对象拓扑(UOT)设计全链定稿:从三件事分离到三继承 之1 20261010(豆包“查看聊天内容”继续)
前端·css
杨杰39811 分钟前
我给嵌入式设备写了个 6MB 的 JavaScript 运行时(xuan)
javascript
栖凤19 分钟前
Java 的 try-catch 在 Agent 里失效了,我用了 5 个模式才兜住
java·前端·python
粥里有勺糖20 分钟前
视野修炼第136期 | 前端小恐龙"Deno"被收购
前端·github·ai编程
修炼的dance24 分钟前
页面塞了13.88 MB字体,导出的PDF只有71 KB
前端
qq_3691736325 分钟前
如何将 AI 生成的 HTML 网页发布成在线链接?不用自己搭建服务器
前端·人工智能·html·效率工具·html 发布
风花一世月33 分钟前
⚡ 我把一座含氢能源园区搬进了浏览器(五类能流实时算守恒,在线直接玩)
前端·人工智能
Gauss松鼠会34 分钟前
【GaussDB】破除gaussdb ugin索引支持中文模糊查询的迷思-字符序
java·运维·服务器·网络·数据库·gaussdb·经验总结
Bruce_Liuxiaowei1 小时前
内网“影子资产“:串口服务器安全盲区剖析
服务器·网络·安全·iot
羲云1 小时前
Claude 越界事件之后:Agent 权限设计为什么不能只靠提示词
前端