天天看點

【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】公共事件子產品

運作效果