首页 > 其他分享 >鸿蒙开发实战:声明静态订阅应用规范

鸿蒙开发实战:声明静态订阅应用规范

时间:2024-08-29 13:51:50浏览次数:12  
标签:实战 订阅 ExtensionAbility name 鸿蒙 静态 StaticSubscriber json

静态订阅者在未接收订阅的目标事件时,处于未拉起状态,当系统或应用发布了指定的公共事件后,静态订阅者将被拉起,并执行 onReceiveEvent 回调。

开发者可通过在 onReceiveEvent 回调中执行业务逻辑,实现当应用接收到特定公共事件时执行业务逻辑的目的。

例如,某应用希望在设备开机的时候执行一些初始化任务,那么该应用可以静态订阅开机事件,在收到开机事件后会拉起该应用,然后执行初始化任务。

设备与环境:

  • 设备:九联 s905l3a 机顶盒

  • 系统:OpenHarmony 3.2 beta2

  • SDK:API 9(Full SDK)

实现过程

①声明静态订阅者

打开 DevEco Studio 创建一个新的 Stage 工程,在工程中新建一个目录 StaticSubscriber。

然后在该目录下面新建一个 ExtensionAbility 的 ets 文件,并让该 ExtensionAbility 从 StaticSubscriberExtensionAbility 派生。

我们可以在 onReceiveEvent(event){ } 中实现自己的业务逻辑,在这里我们实现通过订阅开机公共事件,来启动定时器,在日志中打印信息。

import StaticSubscriberExtensionAbility from '@ohos.application.StaticSubscriberExtensionAbility'
import Logger from '../model/Logger'

export default class StaticSubscriber extends StaticSubscriberExtensionAbility {
  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"
}

最后把修改好的配置文件重新加入到设备系统中:

hdc shell "mount -o remount,rw /"
hdc file send D:\static_subscriber_config.json /etc/static_subscriber_config.json

然后重新启动,应用监听到开机事件,此时就可以在日志中看到打印:

标签:实战,订阅,ExtensionAbility,name,鸿蒙,静态,StaticSubscriber,json
From: https://blog.csdn.net/weqwe6668/article/details/141676993

相关文章

  • Java子类继承父类,静态代码块,代码块,构造方法执行顺序
    最近在做笔试时碰到这样一道题目publicclassTest{ publicstaticvoidmain(String[]args){ Sonson=newSon(); }}classFather{ static{ System.out.println("A"); } { System.out.println("B"); } Father(){ ......
  • 类的成员静态变量和静态成员函数需要类外定义吗,举例说明
    类的成员静态变量需要在类外定义(非声明),而静态成员函数则不需要在类外额外定义。 静态变量类外定义示例 假设有一个类MyClass,它有一个静态成员变量staticVar: cppclassMyClass{public:  staticintstaticVar;//静态成员变量声明  staticvoidstaticFu......
  • 架构实战
    所谓架构,意即系统架构,广义上它涵盖业务架构、运维架构、组织架构等所有系统构建场景,本文特指一般开发人员主要关注的开发架构。关于架构的理论有很多,每个人也都有各自的理解,笔者相信很多人在实际运用中也会遇到各种各样的问题和困惑,本文抛开教条,从一个实际项目的演化看何为架构。......
  • 【云原生之kubernetes实战】k8s环境中部署Nginx服务
    【云原生之kubernetes实战】k8s环境中部署Nginx服务一、Nginx介绍1.1Nginx简介1.2Nginx特点1.3Nginx使用场景二、本次实践介绍2.1本次实践简介2.2本次环境规划三、检查k8s环境3.1检查工作节点状态3.2检查系统pod状态四、部署storageclass(......
  • 我的新书《Android系统多媒体进阶实战》正式发售
    我的新书要正式发售了,把链接贴在下面,感兴趣的朋友可以支持下。❶发售平台:当当,京东,抖音北航社平台,小红书,b站❷目前当当和京东已开启预售❸当当网https://u.dangdang.com/KIDHJ❹京东商城https://item.m.jd.com/product/10109083199634.html?gx=RnAoqRAjajbdh8lR5Q&gxd......
  • 探索未来家居,3DMAX室内设计实战精英班
    ✨【空间魔术师,等你来变身!】✨你是否渴望用设计改变世界,让冰冷的房间焕发生机?3DMAX室内设计实战研修班,是你通往梦想设计殿堂的钥匙。......
  • Android经典实战之存储方案对比:SharedPreferences vs MMKV vs DataStore
    本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点在Android开发中,键值对存储(Key-ValueStorage)是一种经常用到的轻量级数据存储方案。它主要用于保存一些简单的配置数据或状态信息,例如用户设置、缓存数据等。常......
  • 深度学习实战86-高中数学问答大模型介绍、支持将批量的latex数学公式生成pdf的过程详
    大家好,我是微学AI,今天给大家介绍一下深度学习实战86-高中数学问答大模型介绍、支持将批量的latex数学公式生成pdf的过程详解。本文利用MathGPT数学大模型实现的数学教材智能问答系统。该系统结合了自然语言处理和数学知识图谱,能够理解用户的数学问题,并提供准确的答案和解......
  • .NET 8 高并发微服务电商系统实战
    目录前言项目介绍1、核心功能2、优势特点功能介绍技术架构1、后端技术2、前端框架部署架构开发环境项目结构项目效果1、登录页面2、系统首页3、后台管理4、商品管理5、移动端效果项目地址总结最后前言嗨,大家好!推荐一个基于.NET8的高并发微服务电......
  • 网络安全ctf比赛/学习资源整理,解题工具、比赛时间、解题思路、实战靶场、学习路线,推荐
    前言对于想学习或者参加CTF比赛的朋友来说,CTF工具、练习靶场必不可少,今天给大家分享自己收藏的CTF资源,希望能对各位有所帮助。CTF在线工具首先给大家推荐我自己常用的3个CTF在线工具网站,内容齐全,收藏备用。1、CTF在线工具箱:http://ctf.ssleye.com/包含CTF比赛中常用的......