【HarmonyOS 5】桌面快捷方式功能实现详解
2026/7/22 11:05:24 网站建设 项目流程

在HarmonyOS 5中,实现桌面快捷方式主要依靠静态配置的方式。开发者通过预先定义好配置文件,让系统在应用安装后,就能为用户提供长按图标快速访问特定功能的入口。这种方式对用户最直接,也是目前官方推荐的主要实现路径。

简单来说,这个功能可以拆解为配置跳转拉起三个核心环节。

核心配置文件:定义快捷方式的“样子”

首先,需要在项目的resources/base/profile/目录下创建一个名为shortcuts_config.json的配置文件。它用JSON格式描述了每个快捷方式的唯一ID、显示的文字、图标,以及最重要的——点击后要跳转到哪里。

1.shortcuts_config.json示例

json

{ "shortcuts": [ { "shortcutId": "id_go_company", "label": "$string:go_company", "icon": "$media:icon_company", "wants": [ { "bundleName": "com.example.desktopshortcut", "moduleName": "entry", "abilityName": "EntryAbility", "parameters": { "page": "GoCompany" } } ] }, { "shortcutId": "id_go_house", "label": "$string:go_home", "icon": "$media:icon_home", "wants": [ { "bundleName": "com.example.desktopshortcut", "moduleName": "entry", "abilityName": "EntryAbility", "parameters": { "page": "GoHouse" } } ] } ] }
  • shortcutId:每个快捷方式的唯一标识符,长度不超过63字节。

  • label&icon:用户直接看到的名称和图标,建议使用资源索引(如$string:xxx)以方便多语言适配。

  • wants:这里定义了点击快捷方式后系统要执行的动作。parameters字段是开发者自定义的,用于告诉应用用户点击的是哪个快捷方式,下文会详细说明如何接收它。

2. 在module.json5中关联配置

定义好快捷方式后,需要在应用的module.json5文件中,通过metadata字段告知系统这个配置文件的存在。

json

{ "module": { // ... "abilities": [ { "name": "EntryAbility", "srcEntry": "./ets/entryability/EntryAbility.ets", "skills": [ { "entities": ["entity.system.home"], "actions": ["ohos.want.action.home"] } ], "metadata": [ { "name": "ohos.ability.shortcuts", "resource": "$profile:shortcuts_config" } ] } ] } }

这里的name字段必须ohos.ability.shortcuts,这是系统识别快捷方式配置的固定标识。

应用内跳转:处理用户的点击

配置好文件后,最关键的一步是在EntryAbility.ets中接收并处理用户通过快捷方式传来的参数。这个逻辑主要写在onNewWant生命周期回调里。

EntryAbility.ets核心逻辑

typescript

import router from '@ohos.router'; import { Ability, Want, AbilityConstant } from '@kit.AbilityKit'; import { hilog } from '@kit.PerformanceAnalysisKit'; export default class EntryAbility extends Ability { // ... // 当应用已存在,用户再次通过快捷方式点击时触发 onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void { // 1. 从want中取出自定义参数,这里的 'page' 必须和配置文件中的key一致 const page = want.parameters?.page; // 2. 安全校验,避免参数缺失导致崩溃 if (page && typeof page === 'string') { hilog.info(0x0000, 'Shortcut', `Navigating to: ${page}`); // 3. 执行页面跳转 router.pushUrl({ url: `pages/${page}`, }).catch((err) => { hilog.error(0x0000, 'Shortcut', `Push url failed, code: ${err.code}`); }); } else { // 处理无参数或参数无效的情况,比如跳转默认首页 router.replaceUrl({ url: 'pages/Index' }); } } }

关键点说明

  • 两种启动场景onCreate在应用初次启动时触发,而onNewWant在应用已存在、再次被唤起时触发。快捷方式通常需要处理的是后者。

  • 参数一致:代码中want.parameters?.page里的page,必须与shortcuts_config.jsonparameters里定义的键名完全一致。

  • 动态跳转:通过router.pushUrl可以实现根据参数动态跳转到不同的页面(如GoCompanyGoHouse)。确保这些目标页面已用@Entry装饰并在路由表中注册过。

⚠️ 注意事项与限制

  • 数量限制:一个应用最多只能配置4个静态快捷方式。

  • 目标页面:快捷方式只能拉起UIAbility入口页面(即应用的主Ability),不能直接拉起普通页面。所以需要在EntryAbility中做中转跳转。

  • 用户控制:快捷方式的添加和移除,最终决定权在于用户。应用无法强制将快捷方式固定在用户的桌面上,只能提供入口。

总结与官方资源

总的来说,实现静态快捷方式是一个“配置三板斧”的过程:

  1. 定义:在shortcuts_config.json中定义快捷方式的外观和目标。

  2. 关联:在module.json5中通过metadata关联配置文件。

  3. 处理:在EntryAbility.etsonNewWant中解析参数并执行跳转。

官方提供的示例项目DesktopShortcut是一个很好的学习起点,你可以直接参考其完整代码实现。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询