0
点赞
收藏
分享

微信扫一扫

【Harmony OS】【ARK UI】公共事件模块

君心浅语 2022-08-04 阅读 98


 今天讲解一下​​公共事件模块​​功能的实现,主要从“参考资料”,“Api说明”,“代码实现”,“运行效果”,几个方面进行描述

参考文档

参考资料 ​​公共事件模块​​

Api说明

commonEvent.createSubscriber

createSubscriber(subscribeInfo: CommonEventSubscribeInfo, callback: AsyncCallback): void

以异步方法构造CommonEventSubscriber对象,创建公共事件订阅者对象,使用callback形式返回。

参数:

参数名

类型

必填

说明

subscribeInfo

CommonEventSubscribeInfo


公共事件订阅者信息。

callback

AsyncCallback


创建公共事件订阅者的回调函数。

示例代码

var CommonEventSubscribeInfo = {events: ['publish_event']};
commonEvent.createSubscriber(CommonEventSubscribeInfo, (error, subscriber) => {
if (error != null) {
console.error('Operation failed. Cause:' + JSON.stringify(error));
} else {
var mySubscriber = subscriber;
console.info('createSubscriber success. ' + JSON.stringify(subscriber));
}
});

【Harmony OS】【ARK UI】公共事件模块_公共事件

commonEvent.subscribe

subscribe(subscriber: CommonEventSubscriber, callback: AsyncCallback): void

以异步方法订阅公共事件,使用callback形式返回。在调用subscriber接口订阅公共事件前,需要先通过createSubscriber接口创建一个CommonEventSubscriber对象。

参数:

参数名

类型

必填

说明

subscriber

CommonEventSubscriber


公共事件订阅者对象

callback

AsyncCallback


事件监听回调函数,当收到订阅的事件时,回调订阅的事件数据。

示例代码

commonEvent.subscribe(mySubscriber, (error, commonEventData) => { //mySubscriber为创建的CommonEventSubscriber对象
if (error != null) {
console.error('Operation failed. Cause: ' + JSON.stringify(error));
} else {
console.info('subscribe callback: '

【Harmony OS】【ARK UI】公共事件模块_ARK UI_02

commonEvent.unsubscribe

unsubscribe(subscriber: CommonEventSubscriber, callback?: AsyncCallback): void

以异步方法取消订阅公共事件,使用callback形式返回。与subscribe接口相同,需要传入一个已创建的CommonEventSubscriber对象。

参数:

参数名

类型

必填

说明

subscriber

CommonEventSubscriber


公共事件订阅者对象

callback

AsyncCallback


取消订阅回调函数

示例:

commonEvent.unsubscribe(mySubscriber, (error, commonEventData) => { //mySubscriber为创建的CommonEventSubscriber对象
if (error != null) {
console.error('Operation failed. Cause: ' + JSON.stringify(error));
} else {
console.info('unsubscribe success');
}
});

【Harmony OS】【ARK UI】公共事件模块_公共事件_03

补充说明

CommonEventSubscribeInfo

订阅公共事件可选的配置信息。

名称

可读

可写

类型

必填

描述

events



Array


需要订阅的公共事件。

publisherPermission



string


发布者的权限。(暂不支持)

publisherDeviceId



string


设备ID。(暂不支持)

userId



number


用户ID。

priority



number


订阅者优先级,仅用于有序公共事件场景,优先级较高的订阅者将首先收到此类事件。范围为:[-100,1000]。

示例

var CommonEventSubscribeInfo = {events: ['test_event']};
var CommonEventSubscribeInfo = {events: ['test_event1', 'test_event2'], userId:1, priority:100};

【Harmony OS】【ARK UI】公共事件模块_ARK UI_04

CommonEventData

公共事件的回调数据。

名称

可读

可写

类型

必填

描述

event



string


公共事件名称。

bundleName



string


包名称。

code



number


有序公共事件的结果码,默认值为0。

data



string


有序公共事件的结果数据,默认值为空字符串。

parameters



object


公共事件的参数说明。

代码实现

// @ts-nocheck
import commonEvent from '@ohos.commonEvent';

@Entry
@Component
struct MyCommonEvent {
@State result:string="结果:";
mysubscriber:CommonEventSubscriber;
//todo 订阅通知
private aboutToAppear(){
var that=this;
var CommonEventSubscribeInfo = {events: ['publish_event']};
//todo 创建订阅
commonEvent.createSubscriber(CommonEventSubscribeInfo, (error, subscriber) => {
if (error != null) {
console.error('Operation failed. Cause:' + JSON.stringify(error));
} else {
that.mysubscriber=subscriber;
console.info('createSubscriber success. ' + JSON.stringify(subscriber));
//todo 开始订阅
commonEvent.subscribe(subscriber, (error, commonEventData) => { //mySubscriber为创建的CommonEventSubscriber对象
if (error != null) {
console.error('Operation failed. Cause: ' + JSON.stringify(error));

} else {
console.log('subscribe callback: ' + JSON.stringify(commonEventData));
that.result= JSON.stringify(commonEventData)
}
});
}
});
}

private aboutToDisappear() {
//取消订阅
commonEvent.unsubscribe(this.mysubscriber, (error, commonEventData) => { //mySubscriber为创建的CommonEventSubscriber对象
if (error != null) {
console.error('Operation failed. Cause: ' + JSON.stringify(error));
} else {
console.log('unsubscribe success');
}
});

}

build() {
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {

Button('Send Common').onClick(event => {
this.broadcastInternal()
})
Text(this.result).width("100%").height("30%").fontSize(20).textAlign(TextAlign.Center)
}
.width('100%')
.height('100%')

}
//todo 发送信息
private broadcastInternal() {
// 自定义事件,只支持string类型数据
var data = {
code: 1, data: "111111", isOrdered: true
}
commonEvent.publish("publish_event", data, (error, value) => {
if (error != null) {
console.error('broadcast ---> publish failed. Cause: ' + JSON.stringify(error));
} else {
console.log('broadcast ---> publish common event success. ' + JSON.stringify(value));
}
});
}
}

【Harmony OS】【ARK UI】公共事件模块_公共事件_05

运行效果

【Harmony OS】【ARK UI】公共事件模块_ARK UI_06

欲了解更多更全技术文章,欢迎访问​​https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh​​

举报

相关推荐

0 条评论