天天看点

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

 今天讲解一下​​公共事件模块​​功能的实现,主要从“参考资料”,“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】公共事件模块

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】公共事件模块

补充说明

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】公共事件模块

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】公共事件模块

运行效果