鸿蒙应用框架开发【多HAP】程序框架

多HAP

介绍

本示例展示多HAP开发,简单介绍了多HAP的使用场景,应用包含了一个entry HAP和两个feature HAP,两个feature HAP分别提供了音频和视频播放组件,entry中使用了音频和视频播放组件。 三个模块需要安装三个hap包,最终会在设备上安装一个主entry的hap包。

本示例用到了应用上下文Context接口 @ohos.app.ability.common媒体服务接口@ohos.multimedia.media

效果预览

1

使用说明:

1.第一步:点击Build->Build Hap(s)/APP(s)->Build Hap(s),构建三个模块的hap包。

2.第二步:使用IDE安装多Hap包。

2

4.第四步:点击video,进入video播放页面,可点击播放按钮播放视频。

工程目录

├──audioFeature/src/main/ets/
│  ├──application
│  │  └──MyAbilityStage.ets
│  ├──audioAbility
│  │  └──AudioAbility.ets
│  ├──pages
│  │  └──index.ets                            // audio组件的实现页面
│  └──util
│     └──Logger.ts                            // 日志工具
├──audioFeature/src/main/module.json5         // audio模块配置hap类型:"type": "feature"
│
├──entry/src/main/ets/
│  ├──application
│  │  └──MyAbilityStage.ets
│  ├──mainability
│  │  └──MainAbility.ets
│  ├──pages
│  │  └──index.ets                            // entry主应用入口,内含首页组件以及发起hap跳转逻辑
│  └──util
│     └──Logger.ts                            // 日志工具
├──entry/src/main/module.json5                // entry模块配置hap类型:"type": "entry" 
│
├──videoFeature/src/main/ets/
│  ├──application
│  │  └──MyAbilityStage.ets
│  ├──videoability
│  │  └──VideoAbility.ets
│  ├──pages
│  │  └──index.ets                            // video组件的实现页面 
│  └──util
│     └──Logger.ts                            // 日志工具
└──videoFeature/src/main/module.json5         // video模块配置hap类型:"type": "feature"
相关概念

entry:应用的主模块,一个应用中,只有一个entry类型的HAP,一般实现应用的入口界面、入口图标、主特性功能等

feature:应用的特性模块,一个应用中可以包含一个或者多个feature类型的HAP,也可以不含

多HAP:一个应用工程中存在一个entry HAP和多个feature HAP

具体实现

  • 新创建两个Module作为将被跳转的hap,分别命名为videoFeature,audioFeature。源码参考[Index.ets]
/** Copyright (c) 2022-2023 Huawei Device Co., Ltd.* Licensed under the Apache License, Version 2.0 (the "License")* you may not use this file except in compliance with the License.* You may obtain a copy of the License at**     http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/import { common } from '@kit.AbilityKit';
import Logger from '../util/Logger'
import { BusinessError } from '@kit.BasicServicesKit';const TAG: string = 'Index'
const AUDIO: string = 'audio'
const VIDEO: string = 'video'
const BUNDLE_NAME: string = 'com.samples.multihap'
const AUDIO_ABILITY_NAME: string = "AudioAbility"
const VIDEO_ABILITY_NAME: string = "VideoAbility"@Entry
@Component
struct Index {private context?: common.UIAbilityContextbuild() {Row() {Column() {Button(AUDIO).fontSize(50).fontWeight(FontWeight.Bold).onClick(() => {if(this.context){this.context.startAbility({bundleName: BUNDLE_NAME,abilityName: AUDIO_ABILITY_NAME}).then(() => {Logger.info(TAG, 'start audio ability success')}).catch((error: BusinessError) => {Logger.error(TAG, 'start audio ability failed, error: ' + JSON.stringify(error))})}}).id('btnAudio').margin({bottom: 20})Button(VIDEO).fontSize(50).fontWeight(FontWeight.Bold).onClick(() => {if(this.context){this.context.startAbility({bundleName: BUNDLE_NAME,abilityName: VIDEO_ABILITY_NAME}).then(() => {Logger.info(TAG, 'start video ability success')}).catch((error: BusinessError) => {Logger.error(TAG, 'start video ability failed, error: ' + JSON.stringify(error))})}}).id('btnVideo')}.width('100%')}.height('100%')}aboutToAppear() {this.context = getContext(this) as common.UIAbilityContext}
}
  • 配置每个hap的type:把entry文件夹下的module.json5中"type": “entry”,videoFeature和audioFeature文件夹下的module.json5中"type": “feature”;

    • 使用Want跳转到其他的Ability:在entry模块的index.ets中通过common.UIAbilityContext()配置Want,作为多hap间信息传递的载体,用于应用组件间的信息传递;

    • want的配置:通过指定bundleName和abilityName可以唯一确定一个Ability。

    • 新hap的跳转:在entry模块index.ets首页中,在按钮.onclick()事件内,通过Want配置显式拉起一个新的指定的Ability。

      • 例如:以配置videoFeature模块Want配置为例,在触发按钮事件中加入配置的Want:
      • btn.onClick(() => {this.context.startAbility({ bundleName: BUNDLE_NAME, abilityName: AUDIO_ABILITY_NAME }}
      • 其中bundleName为appscope文件夹下app.json5中"bundleName": “com.samples.multihap”。
      • abilityName为videoFeature模块src/main/module.json5中abilities:[“name”: “VideoAbility”],

以上就是本篇文章所带来的鸿蒙开发中一小部分技术讲解;想要学习完整的鸿蒙全栈技术。可以在结尾找我可全部拿到!
下面是鸿蒙的完整学习路线,展示如下:
1

除此之外,根据这个学习鸿蒙全栈学习路线,也附带一整套完整的学习【文档+视频】,内容包含如下

内容包含了:(ArkTS、ArkUI、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、鸿蒙南向开发、鸿蒙项目实战)等技术知识点。帮助大家在学习鸿蒙路上快速成长!

鸿蒙【北向应用开发+南向系统层开发】文档

鸿蒙【基础+实战项目】视频

鸿蒙面经

在这里插入图片描述

为了避免大家在学习过程中产生更多的时间成本,对比我把以上内容全部放在了↓↓↓想要的可以自拿喔!谢谢大家观看!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3267204.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

昇思25天学习打卡营第22天|CycleGAN图像风格迁移互换

相关知识 CycleGAN 循环生成网络,实现了在没有配对示例的情况下将图像从源域X转换到目标域Y的方法,应用于域迁移,也就是图像风格迁移。上章介绍了可以完成图像翻译任务的Pix2Pix,但是Pix2Pix的数据必须是成对的。CycleGAN中只需…

【计算机网络】静态路由实验

一:实验目的 1:掌握通过静态路由方法实现网络的连通性。 二:实验仪器设备及软件 硬件:RCMS-C服务器、网线、Windows 2019/2003操作系统的计算机等。 软件:记事本、WireShark、Chrome浏览器等。 三:实验方…

从零开始:在linux系统安装MongoDB数据完整指南 新手常用命令

1 前言 MongoDB 是为快速开发互联网应用而设计的数据库系统。MongoDB 的设计目标是极简、灵活、作为 Web 应用栈的一部分。MongoDB 的数据模型是面向文档的,所谓文档是一种类似于json的结构。 官网教程:https://www.mongodb.com/docs/manual/ 2 安装部…

【专题】逻辑代数基础

1. 基本概念 逻辑:事物间的因果关系。 逻辑运算:逻辑状态按照指定的某种因果关系继续推理的过程。 逻辑代数:描述客观事物逻辑关系的数学方法,又称布尔代数。 逻辑变量:逻辑代数中的变量。 二值逻辑中,…

解决win10家庭版找不到Hyper-V的问题

Windows 10家庭版在默认的“启用或关闭Windows功能”中不直接包含Hyper-V选项,但可以通过手动步骤来启用它。以下是详细的解决方案: 步骤一:检查电脑是否支持Hyper-V 首先,确认电脑硬件是否支持Hyper-V功能。 打开Windows Powe…

一文弄懂 Nginx

文章目录 1.第⼀部分:Nginx基础回顾1.1 正向代理(Forward Proxy)1.2 反向代理(Reverse Proxy)1.3 Nginx的特点 2. 第⼆部分:Nginx核⼼配置⽂件解读2.1 全局块2.2 events块2.3 http块2.4 示例配置 全局块配置…

libevent入门篇

文章目录 概述下载编译目录samplehello-world初始化创建监听器处理连接处理信号 build 小结 概述 libevent 和 libev 都是由 c 实现的异步事件库;注册异步事件,检测异步事件,根据事件的触发先 后顺序,调用相对应回调函数处理事件…

【Test】一篇文章带你深入详细了解 QWidget 的属性

文章目录 1. 初步认识控件 QWidget2. QWidget2.1 enable 属性2.2 geometry 属性2.3 WindowFrame 的影响2.4 windowTitle 属性2.5 windowIcon 属性2.6 使用 qrc 文件管理资源2.7 QWidget 控件的 windowOpacity 属性2.8 QWidget 的 cursor 属性2.9 QWidget 的 font 属性2.10 QWid…

项目管理中的常用工件(二):可视化工件

项目管理中的常用工件(二):可视化工件 亲和图(affinity diagram)因果图(cause-and-effect diagram)直方图(histogram)流程图(flowchart)散点图&am…

【反证法】932. 漂亮数组

本文涉及知识点 分治 数学 反证法 LeetCode932. 漂亮数组 如果长度为 n 的数组 nums 满足下述条件&#xff0c;则认为该数组是一个 漂亮数组 &#xff1a; nums 是由范围 [1, n] 的整数组成的一个排列。 对于每个 0 < i < j < n &#xff0c;均不存在下标 k&#x…

Sip for Mac:强大的屏幕取色软件

Sip for Mac是一款功能强大的屏幕取色工具软件&#xff0c;专为设计师、开发者和创作者打造。这款软件以其精准的取色功能和丰富的颜色管理选项而备受好评。 Sip的核心功能是提供多种取色工具&#xff0c;包括拾色器、取色板和屏幕取色等&#xff0c;使用户能够轻松地从屏幕上…

掌握AJAX技术:从基础到实战

文章目录 **引言****1. 什么是AJAX&#xff1f;****2. AJAX的工作原理**AJAX 示例使用 Fetch API 实现 AJAX **3. 如何在项目中使用AJAX****4. 处理AJAX请求的常见问题****5. AJAX与JSON的结合****6. 使用AJAX框架和库****7. 实战&#xff1a;创建一个动态表单****8. AJAX中的事…

PyQt5 + selenium,自动票务工具,演唱会门票,学习使用

PyQt5 selenium&#xff1b;在damai工具的基础上加入了UI界面&#xff0c;并将应用做了打包工作&#xff0c;主要是方便不会/不想折腾环境的用户使用&#xff0c;抢票的核心代码来自由于原作者不再维护&#xff0c;自己修改了部分代码。 安装教程 解压安装包到任意位置&…

基于Cobbler实现多版本系统批量部署

一、实验题目 基于Cobbler实现多版本系统批量部署 二、实验目的 通过Cobbler&#xff0c;实验旨在实现无需人工干预即可自动安装多个版本的操作系统。这可以大大提高机房设备或服务器集群的部署效率&#xff0c;减少人力成本和操作错误。 三、实验环境 centos7.9并安装Cob…

科研指标精准管理,构建智能可视化的科研生态系统

随着大数据、人工智能技术的发展&#xff0c;许多学科的现代化发展需求增强&#xff0c;科研领域产生的数据量急剧增加&#xff0c;传统的数据处理方式已经无法满足科研工作的需求。如何有效管理、分析和展示这些数据&#xff0c;成为科研工作的关键。 而可视化技术可以将复杂…

如何选择财税RPA解决方案

随着大数据、物联网、人工智能以及RPA等新兴技术的迅猛发展&#xff0c;每个企业都面临着巨大的行业和技术挑战。财务作为企业运营管理的核心&#xff0c;其数字化转型成为众多企业提升管理效能和实现高质量发展的先行路径。随着RPA技术应用在财务领域的不断深入&#xff0c;越…

WordPress主题追格企业官网主题免费开源版V1.1.6

追格企业官网主题免费开源版由追格开发的一款开源wordpress主题&#xff0c;专为企业建站和追格企业官网小程序&#xff08;开源版&#xff09;PC配套而设计&#xff0c;功能集新闻动态、留言反馈、产品与服务、公司简介、联系我们等模块。

Kube-OVN 混合网络场景最佳实践

在近期的技术分享中&#xff0c;灵雀云技术专家刘梦馨与现场网络专家深入探讨了Kube-OVN在混合网络场景下的最佳实践。本次分享详细介绍了Overlay和Underlay网络的特点及其在实际应用中的混用场景&#xff0c;并展示了Kube-OVN项目如何通过自身的解决方案应对混合网络的挑战。以…

web服务器dns服务器配置服务

1.搭建一个nfs服务器&#xff0c;客户端可以从该服务器的/share目录上传并下载文件 server服务器&#xff1a; 创建 /share目录&#xff0c;并且编辑/etc/exports文件 更改目录权限为755&#xff1a; 755权限码的含义是&#xff1a; 文件所有者&#xff08;第一位数字7&…