HarmonyOS:创建应用静态快捷方式

一、前言

静态快捷方式是一种在系统中创建的可以快速访问应用程序或特定功能的链接。它通常可以在长按应用图标,以图标和相应的文字出现在应用图标的上方,用户可以迅速启动对应应用程序的组件。使用快捷方式,可以提高效率,节省了查找和打开对应的组件时间;也可以实现个性化定制的需求,创建多个快捷方式,以满足个性化的工作流程和操作偏好。应用配置静态快捷方式,在桌面上展示的效果如下图:

安装该应用后,在桌面上长按该应用图标,在应用的图标上方会出现开发者配置的快捷方式(“创建应用静态快捷方式详情”和“分享好友”),点击对应的标签,即可拉起对应的组件。

在这里插入图片描述

二、shortcuts标签

shortcuts标识应用的快捷方式信息。标签值为数组,包含四个子标签shortcutId、label、icon、wants。

metadata中指定shortcut信息,其中:

  • name:指定shortcuts的名称,使用ohos.ability.shortcuts作为shortcuts信息的标识。
  • resource:指定shortcuts信息的资源位置。

shortcuts标签说明

属性名称含义类型是否可缺省
shortcutId标识快捷方式的ID,取值为长度不超过63字节的字符串。不支持通过资源索引的方式($string)配置该字段。字符串该标签不可缺省。
label标识快捷方式的标签信息,即快捷方式对外显示的文字描述信息。取值为长度不超过255字节的字符串,可以是描述性内容,也可以是标识label的资源索引。字符串该标签可缺省,缺省值为空。
icon标识快捷方式的图标,取值为资源文件的索引。字符串该标签可缺省,缺省值为空。
wants标识快捷方式内定义的目标wants信息集合,在调用launcherBundleManager的startShortcut接口时,会拉起wants标签里的第一个目标组件,推荐只配置一个wants元素。对象该标签可缺省,缺省为空。

三、配置方法

2.1 配置快捷方式的配置文件。

开发者若要配置静态快捷方式,可以在某个模块的/resources/base/profile/目录下配置快捷方式的配置文件,如shortcuts_config.json。

{"shortcuts": [{"shortcutId": "id_test1",  // 标识快捷方式,在应用有多个快捷方式时,该字段可作为快捷方式的唯一标识符"label": "$string:share",  // 标识该快捷方式对外显示的文字"icon": "$media:share_icon",  // 标识该快捷方式对外显示的图片"wants": [{"bundleName": "com.ohos.hello",   // 对应该快捷方式对应拉起组件的包名"moduleName": "entry",    // 对应该快捷方式对应拉起组件的模块名"abilityName": "EntryAbility",   // 对应该快捷方式对应拉起组件的组件名"parameters": {"testKey": "testValue"   // 表示拉起快捷方式时的自定义数据}}]}]
}

示例图

在这里插入图片描述

2.2 在应用module.json5文件中配置metadata指向快捷方式的配置文件。

在module.json5配置文件的abilities标签中,针对需要添加快捷方式的UIAbility进行配置metadata标签,使shortcut配置文件对该UIAbility生效。

{"module": {// ..."abilities": [{"name": "EntryAbility","srcEntry": "./ets/entryability/EntryAbility.ets",// ..."metadata": [{"name": "ohos.ability.shortcuts",  // 配置快捷方式,该值固定为ohos.ability.shortcuts"resource": "$profile:shortcuts_config"  // 指定shortcuts信息的资源位置}]}]}
}

示例图

在这里插入图片描述

四、示例

效果图

在这里插入图片描述

示例代码

shortcuts_config.json

{"shortcuts": [{"shortcutId": "1","label": "$string:create_short_cut_detail","icon": "$media:icon_create_shortcut","wants": [{"bundleName": "com.example.learnharmonyos","moduleName": "entry","abilityName": "ShortcutsEntryAbility","parameters": {"pageType": "1"}}]},{"shortcutId": "2","label": "$string:share_friend","icon": "$media:icon_share","wants": [{"bundleName": "com.example.learnharmonyos","moduleName": "entry","abilityName": "ShortcutsEntryAbility","parameters": {"pageType": "2"}}]}]
}

module.json5

 "abilities": [{"name": "EntryAbility","srcEntry": "./ets/entryability/EntryAbility.ets","description": "$string:EntryAbility_desc","icon": "$media:layered_image","label": "$string:EntryAbility_label","startWindowIcon": "$media:startIcon","startWindowBackground": "$color:start_window_background","exported": true,"skills": [{"entities": ["entity.system.home"],"actions": ["action.system.home"]}],"metadata": [{// 配置快捷方式,该值固定为ohos.ability.shortcuts"name": "ohos.ability.shortcuts",// 指定shortcuts信息的资源位置"resource": "$profile:shortcuts_config"}]}]

BackToHomeComponent.ets

import { common, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';const TAG: string = '[BackToHomeComponent]';
const DOMAIN_NUMBER: number = 0xFF00;@Component
export struct BackToHomeComponent {pageName: string = ""build() {Button('回到首页').fontColor($r('app.color.c_black')).fontWeight(FontWeight.Medium).fontSize(20).padding(10).onClick(() => {let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext; // UIAbilityContext// 在FuncAbility中通过调用terminateSelf()方法实现。// context为需要停止的UIAbility实例的AbilityContextlet wantInfo: Want = {deviceId: '', // deviceId为空表示本设备bundleName: 'com.example.learnharmonyos',moduleName: 'entry', // moduleName非必选abilityName: 'EntryAbility',parameters: {// 自定义信息info: this.pageName},}context.startAbility(wantInfo).then(() => {hilog.info(DOMAIN_NUMBER, TAG, 'startAbility EntryAbility 首页 success.');}).catch((error: BusinessError) => {hilog.error(DOMAIN_NUMBER, TAG, 'startAbility EntryAbility 首页 failed.');})context.terminateSelf((err) => {if (err.code) {hilog.error(DOMAIN_NUMBER, TAG,`Failed to terminate self. Code is ${err.code}, message is ${err.message}`);return;}});})}
}

CreateShortCutInfo.ets

import { webview } from '@kit.ArkWeb'
import { BackToHomeComponent } from './BackToHomeComponent'@Entry
@Component
struct CreateShortCutInfo {private webviewController: webview.WebviewController = new webview.WebviewController();private url: string ='https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/typical-scenario-configuration-V5'build() {Column({ space: 10 }) {BackToHomeComponent({ pageName: "CreateShortCutInfo" })Web({ src: this.url, controller: this.webviewController })}.height('100%').width('100%')}
}

ShortCutShare.ets


import { BackToHomeComponent } from './BackToHomeComponent'@Entry
@Component
struct ShortCutShare {@State message: string = '分享成功';build() {Column({ space: 10 }) {BackToHomeComponent({ pageName: "ShortCutShare" })Text(this.message).fontSize(10).fontWeight(FontWeight.Bold).margin({ top: 20 })}.width('100%').height('100%')}
}

ShortcutsEntryAbility.ets

import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { window } from '@kit.ArkUI';export default class ShortcutsEntryAbility extends UIAbility {shortcutsEntryAbilityWant: Want | undefined = undefinedonCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');this.shortcutsEntryAbilityWant = want;}onDestroy(): void {hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');}onWindowStageCreate(windowStage: window.WindowStage): void {// Main window is created, set main page for this abilityhilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');let router = 'pages/shortcuts/CreateShortCutInfo'if (this.shortcutsEntryAbilityWant?.parameters?.pageType &&this.shortcutsEntryAbilityWant?.parameters?.pageType === '2') {router = 'pages/shortcuts/ShortCutShare'}windowStage.loadContent(router, (err) => {if (err.code) {hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');return;}hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.');});}onWindowStageDestroy(): void {// Main window is destroyed, release UI related resourceshilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');}onForeground(): void {// Ability has brought to foregroundhilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground');}onBackground(): void {// Ability has back to backgroundhilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

21.0.2-为什么选FreeRTOS 第21章-FreeRTOS项目实战--基础知识之新建任务、启动流程、编码风格、系统配置

这个是全网最详细的STM32项目教学视频。 第一篇在这里: 视频在这里 STM32智能小车V3-STM32入门教程-openmv与STM32循迹小车-stm32f103c8t6-电赛 嵌入式学习 PID控制算法 编码器电机 跟随 **V3:HAL库开发、手把手教学下面功能:PID速度控制、PID循迹、PID跟随、遥控、…

12 款开源OCR发 PDF 识别框架

2024 年 12 款开源文档解析框架的选型对比评测:PDF解析、OCR识别功能解读、应用场景分析及优缺点比较 这是该系列的第二篇文章,聚焦于智能文档处理(特别是 PDF 解析)。无论是在模型预训练的数据收集阶段,还是基于 RAG…

DeepSeek R1:推理模型新纪元与价格战

标题:DeepSeek R1:推理模型新纪元与价格战 文章信息摘要: DeepSeek R1的发布标志着推理模型研究的重要转折点,其采用四阶段强化学习训练方法,结合监督微调和拒绝采样,显著提升了模型的推理能力。这一进展不…

深度剖析C++17中的std::optional:处理可能缺失值的利器

文章目录 一、基本概念与设计理念二、构建与初始化(一)默认构造(二)值初始化(三)使用std::make_optional(四)使用std::nullopt 三、访问值(一)value()&#x…

拟合损失函数

文章目录 拟合损失函数一、线性拟合1.1 介绍1.2 代码可视化1.2.1 生成示例数据1.2.2 损失函数1.2.3 绘制三维图像1.2.4 绘制等高线1.2.5 损失函数关于斜率的函数 二、 多变量拟合2.1 介绍2.2 代码可视化2.2.1 生成示例数据2.2.2 损失函数2.2.3 绘制等高线 三、 多项式拟合3.1 介…

基于微信小程序的移动学习平台的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

【公因数匹配——暴力、(质)因数分解、哈希】

题目 暴力代码&#xff0c;Acwing 8/10&#xff0c;官网AC #include <bits/stdc.h> using namespace std; const int N 1e610; vector<int> nums[N]; int main() {ios::sync_with_stdio(0);cin.tie(0);int n;cin >> n;for(int i 1; i < n; i){int x;ci…

127周一复盘 (165)玩法与难度思考

1.上午测试&#xff0c;小改了点东西&#xff0c; 基本等于啥也没干。 匆忙赶往车站。 从此进入春节期间&#xff0c;没有开发&#xff0c;而思考与设计。 2.火车上思考玩法与难度的问题。 目前的主流作法实际上并不完全符合不同玩家的需求&#xff0c; 对这方面还是要有自…

【数据结构】_链表经典算法OJ(力扣版)

目录 1. 移除链表元素 1.1 题目描述及链接 1.2 解题思路 1.3 程序 2. 反转链表 2.1 题目描述及链接 2.2 解题思路 2.3 程序 3. 链表的中间结点 3.1 题目描述及链接 3.2 解题思路 3.3 程序 1. 移除链表元素 1.1 题目描述及链接 原题链接&#xff1a;203. 移除链表…

编译器gcc/g++ --【Linux基础开发工具】

文章目录 一、背景知识二、gcc编译选项1、预处理(进行宏替换)2、编译&#xff08;生成汇编&#xff09;3、汇编&#xff08;生成机器可识别代码&#xff09;4、链接&#xff08;生成可执行文件或库文件&#xff09; 三、动态链接和静态链接四、静态库和动态库1、动静态库2、编译…

Java 注解与元数据

Java学习资料 Java学习资料 Java学习资料 一、引言 在 Java 编程中&#xff0c;注解&#xff08;Annotation&#xff09;和元数据&#xff08;Metadata&#xff09;是两个重要的概念。注解为程序提供了一种在代码中嵌入额外信息的方式&#xff0c;这些额外信息就是元数据。元…

操作系统指定用户密码永不过期

背景 实际生产环境中&#xff0c;数据中心操作系统通常会有基线要求&#xff08;比如等保之类&#xff09;&#xff0c;要求设置操作系统密码有效期&#xff0c;但是infra团队或者操作系统管理员或者某些业务配置使用的操作系统用户又需要密码不能不停修改&#xff08;或者说一…

无用的知识又增加了:is_assignable means?

std::pair的默认operator被delete掉了&#xff0c;取而代之的是两个enable_if版本。 为什么这么设计&#xff0c;我的理解是在std::map里&#xff0c;已经保存的元素的key值是不能被修改的&#xff0c;比如 注意&#xff0c;下面的代码会修改key值&#xff0c;编译时出现错误…

能量提升法三:赞美

前情回顾&#xff1a; 《能量提升法二&#xff1a;感恩》 片段&#xff1a;“感恩&#xff0c;就像是在跟世界说&#xff1a;谢谢你&#xff0c;我收到了&#xff0c;我很喜欢&#xff0c;请多来点” 把它归还人海&#xff0c;就当作每一个人&#xff0c;都有可能是曾经帮助…

25美赛ABCDEF题详细建模过程+可视化图表+参考论文+写作模版+数据预处理

详情见该链接&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 25美国大学生数学建模如何准备&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;-CSDN博客文章浏览阅读791次&#xff0c;点赞13次&#xff0c;收藏7次。通过了解比赛基本…

2025企业繁体镜像站镜像站群版 | 干扰码+拼音插入

技术背景 高效的SEO优化和内容采集是企业站群系统的核心竞争力。本文将详细介绍一套企业级网站镜像工具包&#xff0c;重点展示其在SEO优化、内容采集、智能处理等方面的创新实现。 系统特性 1. SEO优化功能 关键词智能布局标题标签优化链接结构优化移动端适配页面加速优化…

动态规划<九>两个数组的dp

目录 引例 LeetCode经典OJ题 1.第一题 2.第二题 3.第三题 4.第四题 5.第五题 6.第六题 7.第七题 引例 OJ传送门LeetCode<1143>最长公共子序列 画图分析&#xff1a; 使用动态规划解决 1.状态表示 ------经验题目要求 经验为选取第一个字符串的[0,i]区间以及第二个字…

大数据学习之SCALA分布式语言三

7.集合类 111.可变set一 112.可变set二 113.不可变MAP集合一 114.不可变MAP集合二 115.不可变MAP集合三 116.可变map一 package com . itbaizhan . chapter07 //TODO 2. 使用 mutable.Map 前导入如下包 import scala . collection . mutable // 可变 Map 集合 object Ma…

MongoDB中常用的几种高可用技术方案及优缺点

MongoDB 的高可用性方案主要依赖于其内置的 副本集 (Replica Set) 和 Sharding 机制。下面是一些常见的高可用性技术方案&#xff1a; 1. 副本集 (Replica Set) 副本集是 MongoDB 提供的主要高可用性解决方案&#xff0c;确保数据在多个节点之间的冗余存储和自动故障恢复。副…

基于OSAL的嵌入式裸机事件驱动框架——整体架构调度机制

参考B站up主【架构分析】嵌入式祼机事件驱动框架 感谢大佬分享 任务ID &#xff1a; TASK_XXX TASK_XXX 在系统中每个任务的ID是唯一的&#xff0c;范围是 0 to 0xFFFE&#xff0c;0xFFFF保留为SYS_TSK_INIT。 同时任务ID的大小也充当任务调度的优先级&#xff0c;ID越大&#…