用户订阅系统公共事件-鸿蒙开发者社区-51CTO.COM

用户订阅系统公共事件

用户订阅系统公共事件

HarmonyOS
2024-05-20 21:29:40
浏览
收藏 1
回答 1
待解决
回答 1
按赞同
/
按时间
coolhead2000

OpenHarmony通过CES(Common Event Service,公共事件服务)为应用程序提供订阅、发布、退订公共事件的能力。

公共事件从系统角度可分为:系统公共事件和自定义公共事件。

系统公共事件:CES内部定义的公共事件,只有系统应用和系统服务才能发布,例如屏幕锁屏、解锁或者分屏,手机飞行模式状态变化等公共事件。目前支持的系统公共事件详见系统公共事件列表。

自定义公共事件:应用自定义一些公共事件用来实现跨进程的事件通信能力。

本篇介绍一下用户如何订阅系统公共事件。

使用的核心API

公共事件定义

@ohos.commonEventManager (公共事件模块)

核心代码

1、  发布公共事件之前首先需要创建订阅者信息subscribeInfo;

2、  使用CommonEventManager.createSubscriber接口创建订阅者并保存返回的Subscriber订阅者对象,用于后续的订阅、退订等操作。

3、  使用commonEventManager.subscribe创建订阅回调函数,订阅回调函数会在接收事件时触发。订阅回调函数返回的data中包含公共事件名称、发布者携带数据等信息。

// 用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作 
let subscriber: commonEventManager.CommonEventSubscriber | null = null; 
  
// 订阅飞行模式状态变化公共事件 
// 行模式状态变化订阅者信息 
let subscribeInfo2: commonEventManager.CommonEventSubscribeInfo = { 
  events: ["usual.event.AIRPLANE_MODE"], 
} 
  
// 创建飞行模式状态变化订阅者回调 
commonEventManager.createSubscriber(subscribeInfo2, (err: BusinessError, data: commonEventManager.CommonEventSubscriber) => { 
  if (err) { 
    console.error(`MayTest Failed to create subscriber. Code is ${err.code}, message is ${err.message}`); 
    return; 
  } 
  console.info('MayTest Succeeded in creating subscriber.'); 
  subscriber = data; 
  // 订阅公共事件回调 
  if (subscriber !== null) { 
    commonEventManager.subscribe(subscriber, (err: BusinessError, data: commonEventManager.CommonEventData) => { 
      if (err) { 
        console.error(`MayTest订阅飞行模式状态变化公共事件失败. Code is ${err.code}, message is ${err.message}`); 
        return; 
      } 
      console.info('MayTest成功订阅飞行模式状态变化公共事件') 
    }) 
  } else { 
    console.error(`MayTest Need create subscriber`); 
  } 
})

测试效果

适配版本信息

IDE:DevEco Studio 4.1.1.300

SDK:HarmoneyOS 4.1.2.1

分享
微博
QQ
微信
回复
2024-05-21 17:24:48
相关问题
公共事件有哪些简单使用
833浏览 • 1回复 待解决
公共事件实现跨进程通信
764浏览 • 1回复 待解决
如何把公共事件发布给其他设备
4241浏览 • 1回复 待解决
公共事件的生命周期是怎样的
1481浏览 • 1回复 待解决
HarmonyOS 事件订阅 emitter问题
436浏览 • 1回复 待解决
Watcher接口如何订阅到OS的崩溃事件
415浏览 • 1回复 待解决
如何订阅系统环境变量的变化
330浏览 • 1回复 待解决