自定义公共事件发布与订阅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模块实现的。开发者可以定义自己的事件类型,并在应用中发布和订阅这些事件。

  1. 定义公共事件类型:首先,开发者需要在config.json文件中定义自定义的事件类型。例如:

    {
      "module": {
        "abilities": [
          {
            "name": ".MyAbility",
            "events": [
              {
                "name": "com.example.myevent"
              }
            ]
          }
        ]
      }
    }
    
  2. 发布公共事件:在代码中,可以通过CommonEventManagerpublish方法来发布事件。例如:

    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");
      }
    });
    
  3. 订阅公共事件:通过CommonEventManagersubscribe方法来订阅事件。例如:

    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);
      }
    });
    
  4. 取消订阅:通过CommonEventManagerunsubscribe方法取消订阅。例如:

    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中自定义公共事件的发布与订阅的基本流程。开发者可以根据实际需求调整事件的参数和处理逻辑。

回到顶部