自定义公共事件发布与订阅HarmonyOS 鸿蒙Next demo
自定义公共事件发布与订阅HarmonyOS 鸿蒙Next demo 能否提供一个自定义公共事件发布与订阅demo
2 回复
demo如下
import { BusinessError, commonEventManager } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
const TAG: string = 'ProcessModel';
const DOMAIN_NUMBER: number = 0xFF00;
@Entry
@Component
struct CommonEventManager {
// @State message: string = 'Hello World';
build() {
Column() {
Text('发布公共事件').onClick(() =>{
setInterval(() =>{
// 公共事件相关信息
let options: commonEventManager.CommonEventPublishData = {
code: 1, // 公共事件的初始代码
data: 'initial data', // 公共事件的初始数据
};
// 发布公共事件,其中的event字段需要替换为实际的事件名称。
commonEventManager.publish('event', options, (err: BusinessError) => {
if (err) {
hilog.error(DOMAIN_NUMBER, TAG, `Publish failed, code is ${JSON.stringify(err.code)}, message is ${JSON.stringify(err.message)}`);
} else {
//...
hilog.info(DOMAIN_NUMBER, TAG, `Publish success`);
}
});
},1000)
})
Text('订阅公共事件').onClick(() =>{
// 用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作
let subscriber: commonEventManager.CommonEventSubscriber | null = null;
// 订阅者信息,其中的event字段需要替换为实际的事件名称。
let subscribeInfo: commonEventManager.CommonEventSubscribeInfo = {
events: ['event'], // 订阅飞行模式公共事件, // 订阅灭屏公共事件
};
// 创建订阅者回调
commonEventManager.createSubscriber(subscribeInfo, (err: BusinessError, data: commonEventManager.CommonEventSubscriber) => {
if (err) {
hilog.error(DOMAIN_NUMBER, TAG, `Failed to create subscriber. Code is ${err.code}, message is ${err.message}`);
return;
}
hilog.info(DOMAIN_NUMBER, TAG, 'Succeeded in creating subscriber.');
subscriber = data;
// 订阅公共事件回调
if (subscriber !== null) {
commonEventManager.subscribe(subscriber, (err: BusinessError, data: commonEventManager.CommonEventData) => {
if (err) {
hilog.error(DOMAIN_NUMBER, TAG, `Failed to subscribe common event. Code is ${err.code}, message is ${err.message}`);
return;
}else{
hilog.info(DOMAIN_NUMBER, TAG, 'SyncManager send event success');
}
// ...
})
} else {
hilog.error(DOMAIN_NUMBER, TAG, `Need create subscriber`);
}
})
})
}
.height('100%')
.width('100%')
}
}
更多关于自定义公共事件发布与订阅HarmonyOS 鸿蒙Next demo的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS(鸿蒙)中,自定义公共事件的发布与订阅是通过CommonEvent
模块实现的。开发者可以定义自己的事件类型,并在应用中发布和订阅这些事件。
-
定义公共事件类型:首先,开发者需要在
config.json
文件中定义自定义的事件类型。例如:{ "module": { "abilities": [ { "name": ".MyAbility", "events": [ { "name": "com.example.myevent" } ] } ] } }
-
发布公共事件:在代码中,可以通过
CommonEventManager
的publish
方法来发布事件。例如:import commonEvent from '[@ohos](/user/ohos).commonEventManager'; let eventInfo = { event: "com.example.myevent", parameters: { key1: "value1", key2: "value2" } }; commonEvent.publish(eventInfo, (err) => { if (err) { console.error(`Failed to publish event. Code is ${err.code}, message is ${err.message}`); } else { console.info("Event published successfully"); } });
-
订阅公共事件:通过
CommonEventManager
的subscribe
方法来订阅事件。例如:import commonEvent from '[@ohos](/user/ohos).commonEventManager'; let subscriberInfo = { events: ["com.example.myevent"] }; commonEvent.subscribe(subscriberInfo, (err, data) => { if (err) { console.error(`Failed to subscribe event. Code is ${err.code}, message is ${err.message}`); } else { console.info("Event received:", data); } });
-
取消订阅:通过
CommonEventManager
的unsubscribe
方法取消订阅。例如:commonEvent.unsubscribe((err) => { if (err) { console.error(`Failed to unsubscribe event. Code is ${err.code}, message is ${err.message}`); } else { console.info("Event unsubscribed successfully"); } });
以上步骤展示了在HarmonyOS中自定义公共事件的发布与订阅的基本流程。开发者可以根据实际需求调整事件的参数和处理逻辑。