本文將介紹如何在 OpenHarmony 中使用靜態(tài)訂閱公共事件。
靜態(tài)訂閱者在未接收訂閱的目標(biāo)事件時(shí),處于未拉起狀態(tài),當(dāng)系統(tǒng)或應(yīng)用發(fā)布了指定的公共事件后,靜態(tài)訂閱者將被拉起,并執(zhí)行 onReceiveEvent 回調(diào)。
開(kāi)發(fā)者可通過(guò)在 onReceiveEvent 回調(diào)中執(zhí)行業(yè)務(wù)邏輯,實(shí)現(xiàn)當(dāng)應(yīng)用接收到特定公共事件時(shí)執(zhí)行業(yè)務(wù)邏輯的目的。
例如,某應(yīng)用希望在設(shè)備開(kāi)機(jī)的時(shí)候執(zhí)行一些初始化任務(wù),那么該應(yīng)用可以靜態(tài)訂閱開(kāi)機(jī)事件,在收到開(kāi)機(jī)事件后會(huì)拉起該應(yīng)用,然后執(zhí)行初始化任務(wù)。
設(shè)備與環(huán)境:
實(shí)現(xiàn)過(guò)程
①聲明靜態(tài)訂閱者
打開(kāi) DevEco Studio 創(chuàng)建一個(gè)新的 Stage 工程,在工程中新建一個(gè)目錄 StaticSubscriber。
然后在該目錄下面新建一個(gè) ExtensionAbility 的 ets 文件,并讓該 ExtensionAbility 從 StaticSubscriberExtensionAbility 派生。
importStaticSubscriberExtensionAbilityfrom'@ohos.application.StaticSubscriberExtensionAbility'
importLoggerfrom'../model/Logger'
exportdefaultclassStaticSubscriberextendsStaticSubscriberExtensionAbility{
num:number=0
onReceiveEvent(event){
Logger.info(`rgytl ----監(jiān)聽(tīng)到公共的事件為:${event.event}`)
setInterval(()=>{
this.num=this.num+1
Logger.info("rgytl----num="+this.num)
},1000)
}
}
②靜態(tài)訂閱者工程配置
在完成靜態(tài)訂閱者的代碼實(shí)現(xiàn)后,需要將該訂閱者配置到系統(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 文件主要關(guān)注以下字段:srcEntrance:表示 ExtensionAbility 的入口文件路徑,即步驟 2 中聲明的靜態(tài)訂閱者所在的文件路徑,也就是我們剛剛創(chuàng)建的目錄文件。type:表示 ExtensionAbility 的類型,對(duì)于靜態(tài)訂閱者需要聲明為 “staticSubscriber”。metadata:表示 ExtensionAbility 的二級(jí)配置文件信息。由于不同的 ExtensionAbility 類型其配置信息不盡相同,因此需要使用不同的 config 文件表示其具體配置信息。name:表示 ExtensionAbility 的類型名稱,對(duì)于靜態(tài)訂閱類型,name 必須聲明為“ohos.extension.staticSubscriber”,否則無(wú)法識(shí)別為靜態(tài)訂閱者。resource:字段表示 ExtensionAbility 的配置信息路徑,由開(kāi)發(fā)者自行定義,在本例中表示路徑為“resources/base/profile/subscribe.json"。metadata 指向的二級(jí)配置文件的通常形式如下:
{
"commonEvents":[
{
"name":"xxx",
"permission":"xxx",
"events":[
"xxx"
]
}
]
}
需要注意二級(jí)配置文件必須按照此形式進(jìn)行聲明,否則會(huì)無(wú)法正確識(shí)別。下面對(duì)字段進(jìn)行介紹:name:靜態(tài)訂閱 ExtensionAbility 的名稱,需要和 module.json5 中聲明的 ExtensionAbility 的 name 一致。permission:訂閱者要求的發(fā)布者需要具備的權(quán)限,對(duì)于發(fā)布了目標(biāo)事件但不具備 permission 中聲明的權(quán)限的發(fā)布者將被視為非法事件不予發(fā)布。events:訂閱的目標(biāo)事件列表。在這里我監(jiān)聽(tīng)的是開(kāi)機(jī)事件和系統(tǒng)事件流逝時(shí)間:
{
"commonEvents":[
{
"name":"StaticSubscriber",
"permission":"",
"events":[
"usual.event.TIME_TICK",
"usual.event.BOOT_COMPLETED"
]
}
]
}
不知道是不是系統(tǒng) bug,在 permission 字段添加權(quán)限的時(shí)候,會(huì)導(dǎo)致應(yīng)用無(wú)法成功啟動(dòng),使用就把權(quán)限去掉了。③應(yīng)用安裝
首先,修改 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"
},
然后,進(jìn)入 905 設(shè)備系統(tǒng),修改 905 設(shè)備系統(tǒng)配置文件,通過(guò) hdc file recv /etc/static_subscriber_config.json D:命令將系統(tǒng)配置文件存放到電腦中。然后修改 static_subscriber_config.json 文件,在該文件中加入我們這個(gè)應(yīng)用的包名:
{
"xxx",
"ohos.extension.staticSubscriber",
"xxx"
}
最后把修改好的配置文件重新加入到設(shè)備系統(tǒng)中:
hdcshell"mount-oremount,rw/"
hdcfilesendD:static_subscriber_config.json/etc/static_subscriber_config.json
然后重新啟動(dòng),應(yīng)用監(jiān)聽(tīng)到開(kāi)機(jī)事件,此時(shí)就可以在日志中看到打印:
![e9373f0c-e307-11ed-ab56-dac502259ad0.png](https://file1.elecfans.com//web2/M00/9A/06/wKgZomTnk32AP2F3AALNsaZ9uFU250.png)
審核編輯 :李倩
-
定時(shí)器
+關(guān)注
關(guān)注
23文章
3256瀏覽量
115460 -
代碼
+關(guān)注
關(guān)注
30文章
4838瀏覽量
69139 -
OpenHarmony
+關(guān)注
關(guān)注
25文章
3753瀏覽量
16671
原文標(biāo)題:OpenHarmony靜態(tài)訂閱應(yīng)用
文章出處:【微信號(hào):gh_834c4b3d87fe,微信公眾號(hào):OpenHarmony技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
RabbitMQ中的發(fā)布訂閱模型
![RabbitMQ中的發(fā)布<b class='flag-5'>訂閱</b>模型](https://file1.elecfans.com/web2/M00/A6/05/wKgaomURKNqAKmJEAAAvsLJOHyk055.jpg)
基于ArkTS語(yǔ)言的OpenHarmony APP應(yīng)用開(kāi)發(fā):公共事件的訂閱和發(fā)布
![](https://file1.elecfans.com/web2/M00/83/FA/wKgaomRl9m6ASPVxAAF4ea5hIIw747.png)
基于OpenHarmony【O了個(gè)H】 #OpenHarmony #HarmonyOS
MQTT協(xié)議介紹之一:發(fā)布/訂閱
OpenHarmony標(biāo)準(zhǔn)設(shè)備應(yīng)用開(kāi)發(fā)筆記匯總
文檔貢獻(xiàn)與寫(xiě)作必讀-OpenHarmony開(kāi)發(fā)者文檔風(fēng)格指南
OpenHarmony開(kāi)發(fā)之MQTT講解
openharmony源碼靜態(tài)分析
![<b class='flag-5'>openharmony</b>源碼<b class='flag-5'>靜態(tài)</b>分析](https://img-blog.csdnimg.cn/img_convert/f4fa71d9e8dfffc1b1e7c3efcb4001e0.png)
淺談Google Play的全新訂閱功能
【學(xué)習(xí)打卡】關(guān)于OpenHarmony的靜態(tài)檢查
![【學(xué)習(xí)打卡】關(guān)于<b class='flag-5'>OpenHarmony</b>的<b class='flag-5'>靜態(tài)</b>檢查](https://file.elecfans.com//web2/M00/4F/42/pYYBAGK_ChyAZIxjAACFVr87byc884.png)
鴻蒙開(kāi)發(fā)學(xué)習(xí):【OpenHarmony HAR】
如何在OpenHarmony設(shè)置靜態(tài)IP?
![如何在<b class='flag-5'>OpenHarmony</b>設(shè)置<b class='flag-5'>靜態(tài)</b>IP?](https://file1.elecfans.com/web2/M00/8F/50/wKgZomTMciWAD54NAABOGP2pQZY452.png)
基于ArkTS語(yǔ)言的OpenHarmony APP應(yīng)用開(kāi)發(fā):公共事件的訂閱和發(fā)布
![基于ArkTS語(yǔ)言的<b class='flag-5'>OpenHarmony</b> APP應(yīng)用開(kāi)發(fā):公共事件的<b class='flag-5'>訂閱</b>和發(fā)布](https://file.elecfans.com/web2/M00/26/21/pYYBAGG5jjSALfrEAAAwAa9Oig8799.png)
評(píng)論