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"
}
}