本文將介紹如何在 OpenHarmony 中使用靜態(tài)訂閱公共事件。
靜態(tài)訂閱者在未接收訂閱的目標事件時,處于未拉起狀態(tài),當系統(tǒng)或應用發(fā)布了指定的公共事件后,靜態(tài)訂閱者將被拉起,并執(zhí)行 onReceiveEvent 回調。
開發(fā)者可通過在 onReceiveEvent 回調中執(zhí)行業(yè)務邏輯,實現當應用接收到特定公共事件時執(zhí)行業(yè)務邏輯的目的。
例如,某應用希望在設備開機的時候執(zhí)行一些初始化任務,那么該應用可以靜態(tài)訂閱開機事件,在收到開機事件后會拉起該應用,然后執(zhí)行初始化任務。
設備與環(huán)境:
實現過程
①聲明靜態(tài)訂閱者
打開 DevEco Studio 創(chuàng)建一個新的 Stage 工程,在工程中新建一個目錄 StaticSubscriber。
然后在該目錄下面新建一個 ExtensionAbility 的 ets 文件,并讓該 ExtensionAbility 從 StaticSubscriberExtensionAbility 派生。
importStaticSubscriberExtensionAbilityfrom'@ohos.application.StaticSubscriberExtensionAbility'
importLoggerfrom'../model/Logger'
exportdefaultclassStaticSubscriberextendsStaticSubscriberExtensionAbility{
num:number=0
onReceiveEvent(event){
Logger.info(`rgytl ----監(jiān)聽到公共的事件為:${event.event}`)
setInterval(()=>{
this.num=this.num+1
Logger.info("rgytl----num="+this.num)
},1000)
}
}
②靜態(tài)訂閱者工程配置
在完成靜態(tài)訂閱者的代碼實現后,需要將該訂閱者配置到系統(tǒng)的 module.json5 中,配置形式如下:
{
"module":{
......
"extensionAbilities":[
{
"name":"StaticSubscriber",
"srcEntrance":"./ets/StaticSubscriber/StaticSubscriber.ts",
"description":"$string:StaticSubscriber_desc",
"icon":"$media:icon",
"label":"$string:StaticSubscriber_label",
"type":"staticSubscriber",
"visible":true,
"metadata":[
{
"name":"ohos.extension.staticSubscriber",
"resource":"$profile:subscribe"
}
]
}
],
......
}
}
上述 json 文件主要關注以下字段:srcEntrance:表示 ExtensionAbility 的入口文件路徑,即步驟 2 中聲明的靜態(tài)訂閱者所在的文件路徑,也就是我們剛剛創(chuàng)建的目錄文件。type:表示 ExtensionAbility 的類型,對于靜態(tài)訂閱者需要聲明為 “staticSubscriber”。metadata:表示 ExtensionAbility 的二級配置文件信息。由于不同的 ExtensionAbility 類型其配置信息不盡相同,因此需要使用不同的 config 文件表示其具體配置信息。name:表示 ExtensionAbility 的類型名稱,對于靜態(tài)訂閱類型,name 必須聲明為“ohos.extension.staticSubscriber”,否則無法識別為靜態(tài)訂閱者。resource:字段表示 ExtensionAbility 的配置信息路徑,由開發(fā)者自行定義,在本例中表示路徑為“resources/base/profile/subscribe.json"。metadata 指向的二級配置文件的通常形式如下:
{
"commonEvents":[
{
"name":"xxx",
"permission":"xxx",
"events":[
"xxx"
]
}
]
}
需要注意二級配置文件必須按照此形式進行聲明,否則會無法正確識別。下面對字段進行介紹:name:靜態(tài)訂閱 ExtensionAbility 的名稱,需要和 module.json5 中聲明的 ExtensionAbility 的 name 一致。permission:訂閱者要求的發(fā)布者需要具備的權限,對于發(fā)布了目標事件但不具備 permission 中聲明的權限的發(fā)布者將被視為非法事件不予發(fā)布。events:訂閱的目標事件列表。在這里我監(jiān)聽的是開機事件和系統(tǒng)事件流逝時間:
{
"commonEvents":[
{
"name":"StaticSubscriber",
"permission":"",
"events":[
"usual.event.TIME_TICK",
"usual.event.BOOT_COMPLETED"
]
}
]
}
不知道是不是系統(tǒng) bug,在 permission 字段添加權限的時候,會導致應用無法成功啟動,使用就把權限去掉了。③應用安裝
首先,修改 OpenHarmony SDK toolchains lib 目錄下面的 UnsgnedReleasedProfileTemplate.json 文件的 apl 字段,將 apl 字段改成 system_basic 或 system_core。
"bundle-info":{
"developer-id":"OpenHarmony",
"distribution-certificate":"xxxxxxx",
"app-feature":"hos_system_app",
"bundle-name":"com.example.xxxx",
"apl":"system_core"
},
然后,進入 905 設備系統(tǒng),修改 905 設備系統(tǒng)配置文件,通過 hdc file recv /etc/static_subscriber_config.json D:命令將系統(tǒng)配置文件存放到電腦中。然后修改 static_subscriber_config.json 文件,在該文件中加入我們這個應用的包名:
{
"xxx",
"ohos.extension.staticSubscriber",
"xxx"
}
最后把修改好的配置文件重新加入到設備系統(tǒng)中:
hdcshell"mount-oremount,rw/"
hdcfilesendD:static_subscriber_config.json/etc/static_subscriber_config.json
然后重新啟動,應用監(jiān)聽到開機事件,此時就可以在日志中看到打?。?/span>

審核編輯 :李倩
-
定時器
+關注
關注
23文章
3298瀏覽量
118960 -
代碼
+關注
關注
30文章
4900瀏覽量
70751 -
OpenHarmony
+關注
關注
29文章
3854瀏覽量
18625
原文標題:OpenHarmony靜態(tài)訂閱應用
文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術社區(qū)】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
RabbitMQ中的發(fā)布訂閱模型

基于ArkTS語言的OpenHarmony APP應用開發(fā):公共事件的訂閱和發(fā)布

基于OpenHarmony【O了個H】 #OpenHarmony #HarmonyOS
MQTT協(xié)議介紹之一:發(fā)布/訂閱
OpenHarmony標準設備應用開發(fā)筆記匯總
文檔貢獻與寫作必讀-OpenHarmony開發(fā)者文檔風格指南
OpenHarmony開發(fā)之MQTT講解
openharmony源碼靜態(tài)分析

淺談Google Play的全新訂閱功能
【學習打卡】關于OpenHarmony的靜態(tài)檢查

如何在OpenHarmony設置靜態(tài)IP?

基于ArkTS語言的OpenHarmony APP應用開發(fā):公共事件的訂閱和發(fā)布

評論