写点什么

HarmonyOS 5.0 应用开发——全局广播的使用

作者:高心星
  • 2024-12-06
    江苏
  • 本文字数:1682 字

    阅读完需:约 6 分钟

HarmonyOS 5.0应用开发——全局广播的使用

【高心星出品】


全局广播的使用

全局广播可以用来做应用间通信,进程间通信,包含订阅、发布等功能。

公共事件

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


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


  • 系统公共事件:CES 内部定义的公共事件,当前仅支持系统应用和系统服务发布,例如 HAP 安装、更新、卸载等公共事件。目前支持的系统公共事件请参见系统公共事件列表。

  • 自定义公共事件:应用定义的公共事件,可用于实现跨进程的事件通信能力。

接受系统公共事件原理

每个应用都可以按需订阅公共事件,订阅成功,当公共事件发布时,系统会将其发送给对应的应用。这些公共事件可能来自系统、其他应用和应用自身。



发布与订阅自定义公共事件

案例功能:在 Index 页面订阅自定义公共事件,Index 页面跳转到 other 页面,other 页面发布全局广播,Index 页面订阅者接受广播事件并弹窗显示数据。



Index 页面代码


import { commonEventManager } from '@kit.BasicServicesKit';import { promptAction, router } from '@kit.ArkUI';
@Entry@Componentstruct Index { @State message: string = ''; // 创建订阅对象 aboutToAppear(): void { let info = commonEventManager.createSubscriberSync({ events: ['event_01']}) // 订阅广播 commonEventManager.subscribe(info,(err,data)=>{ if(err) { console.error('gxxt 订阅信息错误: ',err.message) return } // 接收发来的信息并弹窗显示 AlertDialog.show({message:'这是Index页面广播接受的信息: '+data.data,confirm:{value:'确定',action:()=>{}}}) }) } build() { Column() { Text('Index页面') .fontSize(30) .fontWeight(FontWeight.Bolder) .margin(20) Button('跳转') .width('60%') .onClick(() => { router.pushUrl({url:'pages/other'}) }) .margin(20)

} .height('100%') .width('100%') } aboutToDisappear(): void { // 解除订阅广播 // commonEventManager.unsubscribe(this.info) }}
复制代码


other 页面代码


import { commonEventManager } from '@kit.BasicServicesKit';
@Entry@Componentstruct Other { @State message: string = 'Hello World';
build() { Column(){ Button('发布广播') .width('60%') .onClick(()=>{ // 发送广播,携带数据 commonEventManager.publish('event_01',{data:'我来自other页面的数据'},(err)=>{ if(err){ console.error('gxxt 广播发送错误: '+err.message) } console.log('gxxt 广播放松成功!') }) }) } .height('100%') .width('100%') .justifyContent(FlexAlign.Center) }}
复制代码

订阅系统事件

案例功能:在页面订阅飞行模式转变的系统事件,如果接受到该事件,就将该事件的数据显示在文本框中。



Eventpage 页面代码


import { commonEventManager } from '@kit.BasicServicesKit';
@Entry@Componentstruct Eventpage { @State message: string = '手机状态: ';
aboutToAppear(): void { // 飞行模式转变的事件 let info = commonEventManager.createSubscriberSync({ events: [commonEventManager.Support.COMMON_EVENT_AIRPLANE_MODE_CHANGED] }) commonEventManager.subscribe(info, (err, data) => { if (err) { console.error('gxxt 订阅飞行模式转变广播失败!') return } this.message = '手机状态: ' + data.data }) }
build() { Column() { Text(this.message).fontSize(30).fontWeight(FontWeight.Bolder).border({ width: 3, color: Color.Red }) } .height('100%') .width('100%') .justifyContent(FlexAlign.Center) }}
复制代码


发布于: 刚刚阅读数: 4
用户头像

高心星

关注

天将降大任于斯人也,必先苦其心志。 2024-10-17 加入

华为开发者专家(HDE)。 10年教学经验,兼任多家科技公司技术顾问。先后从事JavaEE项目开发、Python爬虫、HarmonyOS移动应用开发等课程的教学工作。参与开发《鸿蒙应用开发基础》和《鸿蒙项目实战》等课程。

评论

发布
暂无评论
HarmonyOS 5.0应用开发——全局广播的使用_广播_高心星_InfoQ写作社区