【高心星出品】
全局广播的使用
全局广播可以用来做应用间通信,进程间通信,包含订阅、发布等功能。
公共事件
CES(Common Event Service,公共事件服务)为应用程序提供订阅、发布、退订公共事件的能力。
公共事件从系统角度可分为:系统公共事件和自定义公共事件。
接受系统公共事件原理
每个应用都可以按需订阅公共事件,订阅成功,当公共事件发布时,系统会将其发送给对应的应用。这些公共事件可能来自系统、其他应用和应用自身。
发布与订阅自定义公共事件
案例功能:在 Index 页面订阅自定义公共事件,Index 页面跳转到 other 页面,other 页面发布全局广播,Index 页面订阅者接受广播事件并弹窗显示数据。
Index 页面代码
import { commonEventManager } from '@kit.BasicServicesKit';
import { promptAction, router } from '@kit.ArkUI';
@Entry
@Component
struct 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
@Component
struct 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
@Component
struct 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)
}
}
复制代码
评论