【高心星出品】
全局广播的使用
全局广播可以用来做应用间通信,进程间通信,包含订阅、发布等功能。
公共事件
CES(Common Event Service,公共事件服务)为应用程序提供订阅、发布、退订公共事件的能力。
公共事件从系统角度可分为:系统公共事件和自定义公共事件。
接受系统公共事件原理
每个应用都可以按需订阅公共事件,订阅成功,当公共事件发布时,系统会将其发送给对应的应用。这些公共事件可能来自系统、其他应用和应用自身。
发布与订阅自定义公共事件
案例功能:在 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) }}
复制代码
评论