本文將介紹如何在 OpenHarmony 中使用靜態訂閱公共事件。
靜態訂閱者在未接收訂閱的目標事件時,處于未拉起狀態,當系統或應用發布了指定的公共事件后,靜態訂閱者將被拉起,并執行 onReceiveEvent 回調。
開發者可通過在 onReceiveEvent 回調中執行業務邏輯,實現當應用接收到特定公共事件時執行業務邏輯的目的。
例如,某應用希望在設備開機的時候執行一些初始化任務,那么該應用可以靜態訂閱開機事件,在收到開機事件后會拉起該應用,然后執行初始化任務。
設備與環境:
實現過程
①聲明靜態訂閱者
打開 DevEco Studio 創建一個新的 Stage 工程,在工程中新建一個目錄 StaticSubscriber。
然后在該目錄下面新建一個 ExtensionAbility 的 ets 文件,并讓該 ExtensionAbility 從 StaticSubscriberExtensionAbility 派生。我們可以在 onReceiveEvent(event){ }中實現自己的業務邏輯,在這里我們實現通過訂閱開機公共事件,來啟動定時器,在日志中打印信息。
importStaticSubscriberExtensionAbilityfrom'@ohos.application.StaticSubscriberExtensionAbility'
importLoggerfrom'../model/Logger'
exportdefaultclassStaticSubscriberextendsStaticSubscriberExtensionAbility{
num:number=0
onReceiveEvent(event){
Logger.info(`rgytl ----監聽到公共的事件為:${event.event}`)
setInterval(()=>{
this.num=this.num+1
Logger.info("rgytl----num="+this.num)
},1000)
}
}
②靜態訂閱者工程配置
在完成靜態訂閱者的代碼實現后,需要將該訂閱者配置到系統的 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 中聲明的靜態訂閱者所在的文件路徑,也就是我們剛剛創建的目錄文件。type:表示 ExtensionAbility 的類型,對于靜態訂閱者需要聲明為 “staticSubscriber”。metadata:表示 ExtensionAbility 的二級配置文件信息。由于不同的 ExtensionAbility 類型其配置信息不盡相同,因此需要使用不同的 config 文件表示其具體配置信息。name:表示 ExtensionAbility 的類型名稱,對于靜態訂閱類型,name 必須聲明為“ohos.extension.staticSubscriber”,否則無法識別為靜態訂閱者。resource:字段表示 ExtensionAbility 的配置信息路徑,由開發者自行定義,在本例中表示路徑為“resources/base/profile/subscribe.json"。metadata 指向的二級配置文件的通常形式如下:
{
"commonEvents":[
{
"name":"xxx",
"permission":"xxx",
"events":[
"xxx"
]
}
]
}
需要注意二級配置文件必須按照此形式進行聲明,否則會無法正確識別。下面對字段進行介紹:name:靜態訂閱 ExtensionAbility 的名稱,需要和 module.json5 中聲明的 ExtensionAbility 的 name 一致。permission:訂閱者要求的發布者需要具備的權限,對于發布了目標事件但不具備 permission 中聲明的權限的發布者將被視為非法事件不予發布。events:訂閱的目標事件列表。在這里我監聽的是開機事件和系統事件流逝時間:
{
"commonEvents":[
{
"name":"StaticSubscriber",
"permission":"",
"events":[
"usual.event.TIME_TICK",
"usual.event.BOOT_COMPLETED"
]
}
]
}
不知道是不是系統 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 設備系統,修改 905 設備系統配置文件,通過 hdc file recv /etc/static_subscriber_config.json D:命令將系統配置文件存放到電腦中。然后修改 static_subscriber_config.json 文件,在該文件中加入我們這個應用的包名:
{
"xxx",
"ohos.extension.staticSubscriber",
"xxx"
}
最后把修改好的配置文件重新加入到設備系統中:
hdcshell"mount-oremount,rw/"
hdcfilesendD:static_subscriber_config.json/etc/static_subscriber_config.json
然后重新啟動,應用監聽到開機事件,此時就可以在日志中看到打印:
審核編輯 :李倩
-
定時器
+關注
關注
23文章
3246瀏覽量
114725 -
代碼
+關注
關注
30文章
4779瀏覽量
68527 -
OpenHarmony
+關注
關注
25文章
3714瀏覽量
16256
原文標題:OpenHarmony靜態訂閱應用
文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論