创建一个鸿蒙应用项目,在Index页面中创建一个按钮,点击该按钮,可以创建一个公共事件订阅者,可以订阅自定义公共事件(事件名称为:“ncwu.harmonytest.event1”);创建一个Toggle组件(type为Switch),点击可以订阅或取消订阅该自定义公共事件,订阅后可以接受到发布的该自定义公共事件,并在页面中用Text组件显示事件详情;然后在创建一个按钮,点击可以发布该自定义公共事件;最后,在页面中创建一个按钮,点击可以发布一个10秒倒计时定时提醒。
import commonEvent from '@ohos.commonEvent';
import prompt from '@ohos.prompt';
import data from '@ohos.telephony.data';
@Entry
@Component
struct Index {
// 用于存储订阅状态
@State private isSubscribed: boolean = false;
// 订阅者
@State private subscription: any = null;
// 提示信息
@State private message: string = '';
// 创建公共事件订阅者
createSubcriber() {
// 订阅者信息
var subscribeInfo = {
events: ["ncwu.harmonytest.event1"]
};
// 创建订阅者
commonEvent.createSubscriber(subscribeInfo, (err, subscriber) => {
if (err.code) {
prompt.showToast({ message: "创建订阅者错误" + JSON.stringify(err), duration: 3000 })
} else {
this.subscription = subscriber;
this.message = "创建订阅者成功";
}
});
}
// 发布公共事件
publishEvent() {
//公共事件相关信息
var options = {
code: 1, //公共事件的初始代码
data: "公共事件--数据", //公共事件的初始数据
}
commonEvent.publish("ncwu.harmonytest.event1", options, (err) => {
if (err.code) {
prompt.showToast({ message: "发布公共事件错误 " + JSON.stringify(err), duration: 3000 })
} else {
prompt.showToast({ message: "发布公共事件成功", duration: 3000 })
}
})
}
// 订阅公共事件
subscribe() {
if (this.subscription) {
commonEvent.subscribe(this.subscription, (err, data) => {
if (err.code) {
prompt.showToast({ message: "订阅错误 " + JSON.stringify(err), duration: 3000 })
} else {
prompt.showToast({ message: "订阅成功 " + JSON.stringify(data), duration: 3000 })
this.message = `接受内容:event = ${data.data},`;
this.message += `code = ${data.code}, data = ${data.data}`
}
})
this.message = "订阅成功"
} else {
prompt.showToast({ message: "没有订阅者,请先创建!", duration: 3000 })
}
}
// 取消订阅公共事件
unsubscribe() {
if (this.subscription) {
commonEvent.unsubscribe(this.subscription, (err) => {
if (err.code) {
prompt.showToast({ message: "取消订阅错误 " + JSON.stringify(err), duration: 3000 })
} else {
prompt.showToast({ message: "取消订阅成功", duration: 3000 })
this.message = "取消订阅成功"
}
})
}
}
// 倒计时定时提醒
startCountdown() {
let countdown = 10;
const interval = setInterval(() => {
this.message = `倒计时: ${countdown} 秒!`;
countdown--;
if (countdown < 0) {
clearInterval(interval);
console.log("倒计时结束!")
}
}, 1000);
}
build() {
Column({ space: 15 }) {
Button('创建公共事件订阅者')
.fontSize(20)
.margin({ top: 20 })
.onClick(() => {
this.createSubcriber();
})
Row() {
Text('选择是否订阅')
.textAlign(TextAlign.Center)
.fontSize(20)
.margin({ top: 30 });
Toggle({ type: ToggleType.Switch, isOn: this.isSubscribed })
.width(100)
.height(50)
.onChange((isOn: boolean) => {
this.isSubscribed = isOn;
if (isOn) {
this.subscribe();
} else {
this.unsubscribe();
}
})
}
Button("点击发布公共事件", { type: ButtonType.Normal, stateEffect: true }).borderRadius(20)
.backgroundColor(0x317aff)
.fontSize(20)
.onClick(() => {
this.publishEvent();
})
Button("10S倒计时提醒", { type: ButtonType.Normal, stateEffect: true })
.backgroundColor(0x317aff)
.width(200)
.height(50)
.fontSize(20)
.onClick(() => {
this.startCountdown();
})
Text(this.message)
.fontSize(20).padding(10)
.lineHeight(20)
.fontColor("red")
.lineHeight(20)
}
.width('100%')
}
}