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.pswp.cn/web/67256.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67256.shtml
英文地址,請注明出處:http://en.pswp.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越大&#…