HarmonyOS学习(八)——公共事件(CES)

1、公共事件概述
1.1、公共事件的分类

公共事件(Common Event Service,CES)根据事件发送方不同,可分为系统公共事件和自定义公共事件。

在这里插入图片描述

系统公共事件系统将收集到的事件信息根据系统策略发送给订阅该事件的用户程序,公共事件包括终端设备用户可感知的亮灭屏事件,以及系统关键服务发布的系统事件(例如USB插拔,网络连接,系统升级等)
自定义公共事件由应用自身定义的期望特定订阅者可以接收到的公共事件,这些公共事件往往与应用自身的业务逻辑有关
1.2、公共事件的开发

公共事件的开发主要涉及到3个部分,即公共事件订阅开发公共事件发布开发公共事件取消订阅开发

公共事件订阅开发
当需要订阅某个公共事件,获取某个公共事件传递的参数时,可以创建一个订阅者对象,用于作为订阅公共事件的载体,订阅公共事件并获取公共事件传递而来的参数。订阅部分系统公共事件需要申请权限。
公共事件订阅开发的接口如下:
+ 创建订阅者对象(callBack):createSubscriber(subscribeInfo: CommonEventSubscribeInfo,callback:AsyncCallback)
+ 创建订阅者对象(promise):createSubscriber(subscribeInfo: CommonEventSubscribeInfo)
+ 订阅公共事件:subscriber(subscribeInfo: CommonEventSubscribeInfo,callback:AsyncCallback)
公共事件发布开发
当需要发布某个自定义公共事件时,可以通过此方法发布事件,发布的公共事件可以携带数据,供订阅者解析并进行下一步的处理
+ 发布公共事件:publish(event:string,callback:AsyncCallback)
+ 指定发布信息并发布公共事件:publish(event:string,options:CommonEventPublishData,callback:AsyncCallback)
公共事件取消订阅开发
订阅者需要取消已订阅的某个公共事件时,可以通过取消订阅公共事件
取消订阅公共事件:unSubscribe(subscriber:CommomEventSubscriber,callback?:AsyncCallback)
2、实战:订阅,发布,取消公共事件
2.1、创建订阅者
/**
 * 创建订阅者
 */
private createSubscriber() {
  if (this.subscribe) {
    this.message = "subscribe already create"
  } else {
    commonEventManager.createSubscriber({    //创建订阅者
      events: ["testEvent"]                  //指定订阅的事件名称
    }, (err, subscribe) => {                // 创建结果的回调
      if (err) {
        this.message = "create subscribe failure"
      } else {
        this.subscribe = subscribe; //创建订阅成功
        this.message = "create subscriber success";
      }
    })
  }
}
2.2、订阅事件
/**
 * 订阅公共事件
 */
private subscribeCommentEvent(){
  if(this.subscribe){
    //根据创建的subscriber开始订阅事件
    commonEventManager.subscribe(this.subscribe,(err,data) => {
      if(err){
        //异常处理
        this.message = "subscribe event failer" + err;
      } else {
        // 接收到事件
        this.message = "subscribe event success "+ JSON.stringify(data);
      }
    })
  } else {
    this.message = "please create subcribe";
  }
}
2.3、发布事件
/**
 * 发布事件
 */
private publishCommonEvent(){
  //发布公共事件
  commonEventManager.publish("testEvent",(err) =>{
    if(err){
      this.message = "publish event error: " + err;
    } else {
      this.message = "publish event with data success";
    }
  })
}
2.4、取消订阅
/**
 * 取消发布
 */
private  unsubscribeCommentEvent(){
  if(this.subscribe){
    commonEventManager.unsubscribe(this.subscribe,(err,data) => {
      if(err){
        this.message = "unsubscribe event failuere "+ err;
      } else {
        this.message = "unsubscribe event success";
      }
    })
  }else {
    this.message = "already unsubscribed"
  }
}
<think>好的,用户想查找HarmonyOS公共事件服务的相关接口文档或使用方法。我需要先回顾一下系统提供的引用内容,看看有哪些相关的信息。 引用[1]提到HarmonyOS通过CES公共事件服务)提供订阅、发布、退订公共事件的能力。这可能涉及到相关的API接口,比如订阅、发布、退订的方法。用户需要具体的接口文档和使用教程,所以需要进一步展开这些内容。 引用[3]和[4]提到了Node-API接口和异步任务开发,虽然用户的问题主要关于公共事件服务,但可能需要考虑异步处理的情况,比如在订阅或发布事件时是否需要使用异步工作对象来避免阻塞主线程。不过这可能属于更高级的应用,基础的使用方法可能不需要这些。 引用[5]提到数据共享和线程安全,但公共事件服务更多是关于事件通信,可能和线程安全关系不大,暂时可以忽略。 接下来,我需要整理公共事件服务的主要接口和使用步骤。根据引用[1],CES的主要功能是订阅、发布、退订。那么对应的API可能包括subscribe、publish、unsubscribe等方法。可能需要给出这些接口的基本用法,并说明参数和注意事项。 另外,用户需要接口文档和使用教程,引用[2]和[3]提供了学习手册的链接,应该推荐用户参考这些资源。特别是引用[3]中的开发学习手册可能包含详细的API说明和示例代码。 可能还需要提到权限问题,因为公共事件可能涉及系统权限,比如发送静态公共事件需要权限。此外,静态事件和动态事件的区别也是需要注意的点,引用[1]中提到公共事件分为静态和动态,静态事件在系统预定义,动态由应用自定义。 在示例代码部分,应该给出订阅和发布的基本代码结构,使用ArkTS语言,因为HarmonyOS主要使用ArkTS。例如,如何创建订阅者,实现回调函数,调用subscribe方法,以及发布事件的示例。 最后,相关问题部分可以引导用户深入了解更多细节,比如权限配置、动态事件定义、异步处理等,这样能帮助用户进一步探索。</think>### HarmonyOS 公共事件服务(CES)接口文档与使用教程 HarmonyOS公共事件服务(Common Event Service, CES)支持应用间通信,允许应用订阅、发布和退订系统或自定义事件[^1]。以下是核心接口和使用方法: --- #### **一、核心接口说明** 1. **订阅公共事件** ```typescript // 创建订阅者对象 let subscriber: commonEventManager.Subscriber = { onReceiveEvent: (data: string) => { console.log("收到事件数据:" + data); } }; // 订阅事件(以静态事件为例) commonEventManager.subscribe("usual.event.SCREEN_ON", subscriber) .then(() => console.log("订阅成功")) .catch(err => console.error("订阅失败:" + err)); ``` - **参数**: - `eventName`: 事件名称(如`usual.event.SCREEN_ON`为屏幕亮屏事件) - `subscriber`: 订阅者对象,需实现`onReceiveEvent`回调。 2. **发布公共事件** ```typescript // 发布动态事件(需声明权限) let eventParams = { parameters: { key: "value" } // 自定义参数 }; commonEventManager.publish("com.example.MY_EVENT", eventParams) .then(() => console.log("事件发布成功")) .catch(err => console.error("发布失败:" + err)); ``` - **权限要求**: - 发布静态事件需在`config.json`中声明权限。 3. **退订公共事件** ```typescript commonEventManager.unsubscribe(subscriber) .then(() => console.log("退订成功")) .catch(err => console.error("退订失败:" + err)); ``` --- #### **二、使用步骤** 1. **配置权限** 在`config.json`中添加所需权限声明(如发布静态事件需`ohos.permission.COMMON_EVENT_STICKY`)。 2. **定义事件类型** - **静态事件**:使用系统预定义事件(如`usual.event.BOOT_COMPLETED`)。 - **动态事件**:自定义事件名(如`com.example.MY_EVENT`)。 3. **实现订阅与发布逻辑** - 订阅方通过`subscribe()`监听事件。 - 发布方通过`publish()`触发事件并传递参数[^1]。 --- #### **三、文档与学习资源** 1. **官方接口文档** - 参考[HarmonyOS开发者文档](https://developer.harmonyos.com/cn/docs/documentation)中的`公共事件服务`章节。 2. **实战教程** - [OpenHarmony设备开发学习手册](https://gitcode.com/HarmonyOS_MN)包含CES的详细案例[^2]。 - [HarmonyOS Next开发手册](https://gitcode.com/HarmonyOS_MN)提供Node-API与异步任务集成方法(如避免阻塞主线程)[^4]。 --- #### **四、注意事项** 1. **权限管理**:静态事件需严格声明权限,否则发布失败。 2. **性能优化**:高频事件建议使用`napi_create_async_work`异步处理,避免主线程阻塞[^4]。 3. **线程安全**:跨线程数据共享需通过线程安全函数实现[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值