靜態(tài)訂閱公共事件(僅對(duì)系統(tǒng)應(yīng)用開放)

2024-01-25 12:27 更新

場(chǎng)景介紹

靜態(tài)訂閱者在未接收訂閱的目標(biāo)事件時(shí),處于未拉起狀態(tài),當(dāng)系統(tǒng)或應(yīng)用發(fā)布了指定的公共事件后,靜態(tài)訂閱者將被拉起,并執(zhí)行onReceiveEvent回調(diào),開發(fā)者可通過在onReceiveEvent回調(diào)中執(zhí)行業(yè)務(wù)邏輯,實(shí)現(xiàn)當(dāng)應(yīng)用接收到特定公共事件時(shí)執(zhí)行業(yè)務(wù)邏輯的目的。例如,某應(yīng)用希望在設(shè)備開機(jī)的時(shí)候執(zhí)行一些初始化任務(wù),那么該應(yīng)用可以靜態(tài)訂閱開機(jī)事件,在收到開機(jī)事件后會(huì)拉起該應(yīng)用,然后執(zhí)行初始化任務(wù)。靜態(tài)訂閱是通過配置文件聲明和實(shí)現(xiàn)繼承自StaticSubscriberExtensionAbility的類實(shí)現(xiàn)對(duì)公共事件的訂閱。需要注意的是,靜態(tài)訂閱公共事件對(duì)系統(tǒng)功耗有一定影響,建議謹(jǐn)慎使用

開發(fā)步驟

  1. 靜態(tài)訂閱者聲明

    聲明一個(gè)靜態(tài)訂閱者,首先需要在工程中新建一個(gè)ExtensionAbility, 該ExtensionAbility從StaticSubscriberExtensionAbility派生,其代碼實(shí)現(xiàn)如下:

    1. import StaticSubscriberExtensionAbility from '@ohos.application.StaticSubscriberExtensionAbility'
    2. export default class StaticSubscriber extends StaticSubscriberExtensionAbility {
    3. onReceiveEvent(event) {
    4. console.log('onReceiveEvent, event:' + event.event);
    5. }
    6. }

    開發(fā)者可以在onReceiveEvent中實(shí)現(xiàn)業(yè)務(wù)邏輯。

  2. 靜態(tài)訂閱者工程配置

    在完成靜態(tài)訂閱者的代碼實(shí)現(xiàn)后,需要將該訂閱者配置到系統(tǒng)的module.json5中,配置形式如下:

    1. {
    2. "module": {
    3. ......
    4. "extensionAbilities": [
    5. {
    6. "name": "StaticSubscriber",
    7. "srcEntrance": "./ets/StaticSubscriber/StaticSubscriber.ts",
    8. "description": "$string:StaticSubscriber_desc",
    9. "icon": "$media:icon",
    10. "label": "$string:StaticSubscriber_label",
    11. "type": "staticSubscriber",
    12. "visible": true,
    13. "metadata": [
    14. {
    15. "name": "ohos.extension.staticSubscriber",
    16. "resource": "$profile:subscribe"
    17. }
    18. ]
    19. }
    20. ]
    21. ......
    22. }
    23. }

    上述json文件主要關(guān)注以下字段:

    • srcEntrance : 表示ExtensionAbility的入口文件路徑,即步驟2中聲明的靜態(tài)訂閱者所在的文件路徑

    • type: 表示ExtensionAbility的類型,對(duì)于靜態(tài)訂閱者需要聲明為“staticSubscriber”

    • metadata: 表示ExtensionAbility的二級(jí)配置文件信息。由于不同的ExtensionAbility類型其配置信息不盡相同,因此需要使用不同的config文件表示其具體配置信息。

      • name:表示ExtensionAbility的類型名稱,對(duì)于靜態(tài)訂閱類型,name必須聲明為“ohos.extension.staticSubscriber”,否則無法識(shí)別為靜態(tài)訂閱者;
      • resource: 字段表示ExtensionAbility的配置信息路徑,由開發(fā)者自行定義,在本例中表示路徑為“resources/base/profile/subscribe.json"。

    metadata指向的二級(jí)配置文件的通常形式如下:

    1. {
    2. "commonEvents": [
    3. {
    4. "name": "xxx",
    5. "permission": "xxx",
    6. "events":[
    7. "xxx"
    8. ]
    9. }
    10. ]
    11. }

    需要注意二級(jí)配置文件必須按照此形式進(jìn)行聲明,否則會(huì)無法正確識(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)事件列表

  3. 修改設(shè)備系統(tǒng)配置文件

    修改設(shè)備系統(tǒng)配置文件 /etc/static_subscriber_config.json,將靜態(tài)訂閱應(yīng)用者的包名添加至該json文件中即可。

    1. {
    2. "xxx",
    3. "ohos.extension.staticSubscriber",
    4. "xxx"
    5. }
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)