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 小结
本文围绕鸿蒙公共事件开发展开,系统讲解了订阅、发布、取消订阅三大核心能力及实战案例,突出鸿蒙公共事件“跨应用/系统数据传递”的简单易用特性,助力开发者快速掌握分布式通信关键技能。
所有评论(0)