当前位置:网站首页>【Harmony OS】【ARK UI】公共事件模块

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

2022-08-09 08:12:00 华为开发者论坛

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

参考文档


参考资料 公共事件模块

Api说明

commonEvent.createSubscriber

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

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

参数:

参数名类型必填说明
subscribeInfoCommonEventSubscribeInfo公共事件订阅者信息。
callbackAsyncCallback创建公共事件订阅者的回调函数。

示例代码

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));
    }
    });

commonEvent.subscribe

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

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

参数:

参数名类型必填说明
subscriberCommonEventSubscriber公共事件订阅者对象
callbackAsyncCallback事件监听回调函数,当收到订阅的事件时,回调订阅的事件数据。

示例代码

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

commonEvent.unsubscribe


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

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

参数:

参数名类型必填说明
subscriberCommonEventSubscriber公共事件订阅者对象
callbackAsyncCallback取消订阅回调函数

示例:

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

补充说明

CommonEventSubscribeInfo

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

名称可读可写类型必填描述
eventsArray需要订阅的公共事件。
publisherPermissionstring发布者的权限。(暂不支持)
publisherDeviceIdstring设备ID。(暂不支持)
userIdnumber用户ID。
prioritynumber订阅者优先级,仅用于有序公共事件场景,优先级较高的订阅者将首先收到此类事件。范围为:[-100,1000]。

示例

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

CommonEventData

公共事件的回调数据。

名称可读可写类型必填描述
eventstring公共事件名称。
bundleNamestring包名称。
codenumber有序公共事件的结果码,默认值为0。
datastring有序公共事件的结果数据,默认值为空字符串。
parametersobject公共事件的参数说明。

代码实现


// @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));
      }
    });
  }
}

运行效果


83e3e0159834257e38665c73034b5c77_1666x1054.gif%40900-0-90-f.gif

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

原网站

版权声明
本文为[华为开发者论坛]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/developer-huawei/p/16564664.html