今天講解一下公共事件子產品功能的實作,主要從“參考資料”,“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));
}
});
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: '
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');
}
});
補充說明
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};
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));
}
});
}
}