1. 前言
想获取电量过低的状态、电池充电或断电状态、屏幕解锁或锁定等公共事件时,我们可以通过commonEventManager 接口实现相关能力。
2. 参考文档
nullhttps://developer.huawei.com/consumer/cn/doc/harmonyos-guides/common-event-subscription
3. 核心思路
- 创建订阅信息
- 订阅公共事件
- 取消订阅
4. 核心代码
// 创建订阅
createSubscriber(): void {
// 订阅者信息:配置需要监听的公共事件
let subscribeInfo: commonEventManager.CommonEventSubscribeInfo = {
events: [
'usual.event.POWER_CONNECTED', // 设备充电事件
'usual.event.BATTERY_LOW',// 电池低电量事件
],
};
// 1. 创建订阅者
commonEventManager.createSubscriber(subscribeInfo,
(err: BusinessError, subscriber: commonEventManager.CommonEventSubscriber) => {
if (err) {
hilog.error(DOMAIN_NUMBER, TAG, `创建订阅者失败: ${err.message}`);
return;
}
this.showDialog("创建订阅成功")
hilog.info(DOMAIN_NUMBER, TAG, 'Succeeded in creating subscriber.');
// 【关键】保存订阅者对象到成员变量,后续取消订阅需用到它
this.subscriber = subscriber;
}
);
}
// 订阅事件
subscribe(): void {
commonEventManager.subscribe(this.subscriber, (subErr, eventData) => {
if (subErr) {
hilog.error(DOMAIN_NUMBER, TAG, `订阅事件失败: ${subErr.message}`);
return;
}
this.showDialog(`订阅事件触发成功:${JSON.stringify(eventData)}`)
hilog.info(DOMAIN_NUMBER, TAG, `事件触发成功!数据: ${JSON.stringify(eventData)}`);
});
}
// 取消订阅事件
unsubscribe(): void {
if (this.subscriber !== null) {
commonEventManager.unsubscribe(this.subscriber, (err: BusinessError) => {
if (err) {
hilog.error(DOMAIN_NUMBER, TAG, `取消订阅失败: ${err.message}`);
return;
}
this.showDialog("取消订阅成功")
hilog.info(DOMAIN_NUMBER, TAG, '成功取消订阅事件');
});
}
}
5. 完整代码
Index.ets
import { BusinessError, commonEventManager } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
const TAG: string = 'ProcessModel';
const DOMAIN_NUMBER: number = 0xFF00;
@Entry
@ComponentV2
struct Index {
// 【关键】将订阅者对象提升为组件成员变量,供"取消订阅"时使用
private subscriber: commonEventManager.CommonEventSubscriber | null = null;
// 弹窗
showDialog(mes: string): void {
this.getUIContext().showAlertDialog({ message: mes })
}
// 创建订阅
createSubscriber(): void {
// 订阅者信息:配置需要监听的公共事件
let subscribeInfo: commonEventManager.CommonEventSubscribeInfo = {
events: [
'usual.event.POWER_CONNECTED', // 设备充电事件
'usual.event.BATTERY_LOW',// 电池低电量事件
],
};
// 1. 创建订阅者
commonEventManager.createSubscriber(subscribeInfo,
(err: BusinessError, subscriber: commonEventManager.CommonEventSubscriber) => {
if (err) {
hilog.error(DOMAIN_NUMBER, TAG, `创建订阅者失败: ${err.message}`);
return;
}
this.showDialog("创建订阅成功")
hilog.info(DOMAIN_NUMBER, TAG, 'Succeeded in creating subscriber.');
// 【关键】保存订阅者对象到成员变量,后续取消订阅需用到它
this.subscriber = subscriber;
}
);
}
// 订阅事件
subscribe(): void {
commonEventManager.subscribe(this.subscriber, (subErr, eventData) => {
if (subErr) {
hilog.error(DOMAIN_NUMBER, TAG, `订阅事件失败: ${subErr.message}`);
return;
}
this.showDialog(`订阅事件触发成功:${JSON.stringify(eventData)}`)
hilog.info(DOMAIN_NUMBER, TAG, `事件触发成功!数据: ${JSON.stringify(eventData)}`);
});
}
// 取消订阅事件
unsubscribe(): void {
if (this.subscriber !== null) {
commonEventManager.unsubscribe(this.subscriber, (err: BusinessError) => {
if (err) {
hilog.error(DOMAIN_NUMBER, TAG, `取消订阅失败: ${err.message}`);
return;
}
this.showDialog("取消订阅成功")
hilog.info(DOMAIN_NUMBER, TAG, '成功取消订阅事件');
});
}
}
build() {
Column({ space: 150 }) {
Text("公共事件订阅示例")
.fontSize(20)
Column({ space: 20 }) {
Button("1、创建订阅事件").onClick((event: ClickEvent) => {
this.createSubscriber();
})
Button("2、订阅事件").onClick((event: ClickEvent) => {
this.subscribe();
this.showDialog("订阅成功")
})
Button("3、取消订阅事件").onClick((event: ClickEvent) => {
this.unsubscribe();
})
}
}
.height("100%")
.width("100%")
.justifyContent(FlexAlign.Center)
}
}
6. 运行效果






7. 完整代码
Index.ets
import { BusinessError, commonEventManager } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
const TAG: string = 'ProcessModel';
const DOMAIN_NUMBER: number = 0xFF00;
@Entry
@ComponentV2
struct Index {
// 【关键】将订阅者对象提升为组件成员变量,供"取消订阅"时使用
private subscriber: commonEventManager.CommonEventSubscriber | null = null;
// 弹窗
showDialog(mes: string): void {
this.getUIContext().showAlertDialog({ message: mes })
}
// 创建订阅
createSubscriber(): void {
// 订阅者信息:配置需要监听的公共事件
let subscribeInfo: commonEventManager.CommonEventSubscribeInfo = {
events: [
'usual.event.POWER_CONNECTED', // 设备充电事件
'usual.event.BATTERY_LOW',// 电池低电量事件
],
};
// 1. 创建订阅者
commonEventManager.createSubscriber(subscribeInfo,
(err: BusinessError, subscriber: commonEventManager.CommonEventSubscriber) => {
if (err) {
hilog.error(DOMAIN_NUMBER, TAG, `创建订阅者失败: ${err.message}`);
return;
}
this.showDialog("创建订阅成功")
hilog.info(DOMAIN_NUMBER, TAG, 'Succeeded in creating subscriber.');
// 【关键】保存订阅者对象到成员变量,后续取消订阅需用到它
this.subscriber = subscriber;
}
);
}
// 订阅事件
subscribe(): void {
commonEventManager.subscribe(this.subscriber, (subErr, eventData) => {
if (subErr) {
hilog.error(DOMAIN_NUMBER, TAG, `订阅事件失败: ${subErr.message}`);
return;
}
this.showDialog(`订阅事件触发成功:${JSON.stringify(eventData)}`)
hilog.info(DOMAIN_NUMBER, TAG, `事件触发成功!数据: ${JSON.stringify(eventData)}`);
});
}
// 取消订阅事件
unsubscribe(): void {
if (this.subscriber !== null) {
commonEventManager.unsubscribe(this.subscriber, (err: BusinessError) => {
if (err) {
hilog.error(DOMAIN_NUMBER, TAG, `取消订阅失败: ${err.message}`);
return;
}
this.showDialog("取消订阅成功")
hilog.info(DOMAIN_NUMBER, TAG, '成功取消订阅事件');
});
}
}
build() {
Column({ space: 150 }) {
Text("公共事件订阅示例")
.fontSize(20)
Column({ space: 20 }) {
Button("1、创建订阅事件").onClick((event: ClickEvent) => {
this.createSubscriber();
})
Button("2、订阅事件").onClick((event: ClickEvent) => {
this.subscribe();
this.showDialog("订阅成功")
})
Button("3、取消订阅事件").onClick((event: ClickEvent) => {
this.unsubscribe();
})
}
}
.height("100%")
.width("100%")
.justifyContent(FlexAlign.Center)
}
}
觉得有用可以点赞或收藏