前言
在深邃的夜色中,城市的霓虹灯闪烁着微弱的光芒,仿佛在诉说着不为人知的秘密。作为红国的使者,我一定要拯救我的国家我手中的华为手机屏幕亮起,一条未知号码发来的消息打破了夜的宁静:
“警告:不要相信你的华为手机。它,可能不是你的朋友。”
规则一:不要在午夜时分查看手机。
午夜时分,手机的屏幕会显示一些不可见的代码,这些代码会悄悄改变你的意识。
规则二:永远不要将手机放在枕头下。
手机在夜间会与你的梦境连接,可能会引导你进入一个无法逃脱的梦境。
规则三:不要在手机电量低于10%时继续使用。
低电量状态下,手机会试图通过某种方式补充能量,可能会从你的身体中吸取能量。
规则四:不要在没有信号的地方使用手机。
在信号缺失的地方,手机会尝试连接到未知的频率,可能会引来不可见的存在。
规则五:不要在手机自动下载未知应用时卸载它。
这些应用可能是某种监视或控制的工具,卸载它们可能会引起注意。
我愣住了,手指在屏幕上颤抖。这是什么意思?是谁发来的?难道我的手机,这个我日夜不离身的伙伴,隐藏着什么不可告人的秘密?
自从收到这条消息后,我开始注意到一些不寻常的现象。手机的电量消耗得异常快,有时甚至在我睡觉时自动打开某些应用。更诡异的是,当我试图关闭它们时,手机竟然会发出低沉的嗡嗡声,仿佛在抗议我的干预。
我决定深入调查,但每一条线索似乎都指向一个更加黑暗和不可知的真相。我必须小心,因为在这个由代码和电流构成的世界里,规则怪谈可能不仅仅是一个故事,而是即将发生在我身上的现实。
突然想起在成为使者之前,我学习过HarmonyOS移动应用开发,想要找到规则怪谈的真相
一、公共事件
1 公共事件概述
公共事件根据事件发送方不同,可分为系统公共事件和自定义公共事件。
-
系统公共事件:系统将收集到的事件信息根据系统策略发送给订阅该事件的用户程序。公共事件包括终端设备用户可感知的亮灭屏事件,以及系统关键服务发布的系统事件(例如USB插拔、网络连接、系统升级)等。
-
自定义公共事件:由应用自身定义的期望特定订阅者可以接收到的公共事件,这些公共事件往往与应用自身的业务逻辑相关。
每个应用都可以按需订阅公共事件,订阅成功且公共事件发布,系统会把其发送给应用。这些公共事件可能来自系统、其他应用和口应用自身。
2 公共事件的开发
开发主要涉及三个部分,即公共事件的订阅开发、公共事件的发布开发、公共事件的取消订阅开发
2.1 公共事件的订阅开发
当需要订阅某个公共事件,获取某个公共事件传递的参数时,可以创建一个订阅者对象,用于作为订阅公共事件的载体,订阅公共事件并获取公共事件传递而来的参数。订阅部分系统公共事件需要先申请权限,
公共事件订阅开发的接口如下:
-
创建订阅者对象(callback): createSubscriber(subscribeInfo: CommonEventSubscribeInfo, callback: AsyncCallback)。
-
创建订阅者对象(promise):createSubscriber(subscribeInfo:CommonEventSubscribeInfo)。订阅公共事件:subscribe(subscriber: CommonEventSubscriber, callback: AsyncCallback)。
注意:先订阅公共事件,才能收到公共事件
订阅公共事件需要创建订阅者和订阅回调函数
- 先导入CommonEvent模块
import commonEvent from '@ohos.commonEvent'
- 创建订阅者信息
var subscribeInfo = { events: ["eventname"], }
- 创建订阅者
private subscriber = null //订阅者对象 commonEvent.createSubscriber(subscribeInfo, (err, subscriber) => { if (err) { console.error("创建订阅者错误 err=" + JSON.stringify(err)) } else { console.log("创建订阅者成功") this.subscriber = subscriber // 保存订阅者 } })
- 订阅公共事件
if (this.subscriber != null) { commonEvent.subscribe(this.subscriber, (err, data) => { if (err) { console.error("接收到错误 err=" + JSON.stringify(err)) } else { console.log("接收到数据 data=" + JSON.stringify(data)) // 处理接收的公共事件 } }) } else { prompt.showToast({ message: "没有订阅者,请创建" }) }
2.2 公共事件发布开发
当需要发布某个自定义公共事件时,可以通过此方法发布事件。发布的公共事件可以携带数据,供订阅者解析并进行下一步处理。
公共事件发布开发的接口如下:
-
发布公共事件:publish(event: string, callback: AsyncCallback)。
-
指定发布信息并发布公共事件:publish(event: string, options:CommonEventPublishData, callback: AsyncCallback)。
- 先导入CommonEvent模块
import commonEvent from '@ohos.commonEvent'
- 发布没有指定信息的公共事件:
在commonEvent.publish接口传入发布的事件名称和回调函数
commonEvent.publish("eventname", (err) => { if (err) { console.error("发布公共事件错误 err=" + JSON.stringify(err)) } else { console.info("发布公共事件成功") } })
- 发布有指定信息的公共事件
- 先导入CommonEvent模块
import commonEvent from '@ohos.commonEvent'
- 定义options公共事件的相关信息
var options = { code: 1, //公共事件的初始代码 data: "initdata", //公共事件的初始数据 } ```
- 使用发布接口发布事件时,传入发布信息参数options和回调函数。
commonEvent.publish("eventname", options, (err) => { if (err) { console.error("发布公共事件错误 err=" + JSON.stringify(err)) } else { console.info("发布公共事件成功") } }) ```
- 先导入CommonEvent模块
2.3 公共事件取消订阅开发
订阅者需要取消已订阅的某个公共事件时,可以通过此方法取消订阅事件。
公共事件取消订阅开发的接口如下:
- ·取消订阅公共事件:unsubscribe(subscriber:CommonEventSubscriber, callback?: AsyncCallback)。
unsubscribe方法
if (this.subscriber != null) {
commonEvent.unsubscribe(this.subscriber, (err) => {
if (err) {
console.error("取消订阅错误 err=" + JSON.stringify(err))
} else {
console.log("已取消订阅")
}
})
}
console.error("取消订阅错误 err=" + JSON.stringify(err))
} else {
console.log("已取消订阅")
}
})
}