【HarmonyOS 5】桌面快捷方式功能实现详解

简介: 在移动应用开发中,如何让用户快速触达核心功能,是目前很常见的功能之一。鸿蒙系统提供的**桌面快捷方式(Shortcuts)**功能,允许开发者为应用内常用功能创建直达入口,用户通过长按应用图标即可快速启动特定功能,大幅减少操作层级。本文将结合地图导航场景,详细解析鸿蒙快捷方式的实现原理与开发流程。结合华为官方开源示例 DesktopShortcut 展开,该示例基于HarmonyOS 5.0实现,完整演示了地图导航场景的快捷方式开发流程。


##鸿蒙开发能力 ##HarmonyOS SDK应用服务##鸿蒙金融类应用 (金融理财#

一、前言

在移动应用开发中,如何让用户快速触达核心功能,是目前很常见的功能之一。

鸿蒙系统提供的**桌面快捷方式(Shortcuts)**功能,允许开发者为应用内常用功能创建直达入口,用户通过长按应用图标即可快速启动特定功能,大幅减少操作层级。

本文将结合地图导航场景,详细解析鸿蒙快捷方式的实现原理与开发流程。结合华为官方开源示例 DesktopShortcut 展开,该示例基于HarmonyOS 5.0实现,完整演示了地图导航场景的快捷方式开发流程。


二、需求分析与示例工程介绍

以地图应用为例,用户日常高频使用“回家”“去公司”等导航功能。传统流程需先打开应用、搜索目的地、再启动导航。通过快捷方式,可实现:

  1. 长按应用图标,在快捷方式列表中直接点击“回家”或“去公司”;
  2. 拖动快捷方式到桌面,通过独立图标一键启动导航。

工程目录介绍

├── entry/src/main/ets                  
│  ├── entryability                         
│  │  └── EntryAbility.ets                  // 核心逻辑:处理快捷方式参数并跳转页面
│  └── pages                                
│     ├── GoCompany.ets                     // 公司导航页面(@Entry装饰)
│     ├── GoHouse.ets                       // 回家导航页面(@Entry装饰)
│     └── Index.ets                         // 应用首页
├── entry/src/main/resources                
│  └── base/profile                         
│     └── shortcuts_config.json             // 快捷方式元数据配置
└── module.json5                             // 模块配置文件,关联快捷方式

三、快捷方式功能实现步骤

1、 核心配置文件

(1)shortcuts_config.json:定义快捷方式的元数据,包括ID、名称、图标及目标跳转信息。

{
  "shortcuts": [
    {
      "shortcutId": "id_go_company",
      "label": "$string:go_company",        // 对应resources/base/element/string.json中的字符串资源
      "icon": "$media:icon_company",        // 对应resources/base/media目录下的图标文件
      "wants": [
        {
          "bundleName": "com.example.desktopshortcut", // 应用包名(需与module.json5一致)
          "moduleName": "entry",                        // 模块名(固定为entry)
          "abilityName": "EntryAbility",               // 目标Ability(入口Ability)
          "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" } //  `parameters`键名可自定义(示例中使用`page`而非前文的`shortCutKey`),需与代码逻辑保持一致。
        }
      ]
    }
  ]
}


(2)module.json5:声明快捷方式配置文件的引用,关联至应用模块。

{
  "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" // 引用profile目录下的配置文件
          }
        ]
      }
    ]
  }
}

(3)关键字段说明

字段

说明

shortcutId

唯一标识(长度≤63字节),如id_company。

label

显示名称(支持资源索引),如$string:Go_to_the_Company。

icon

图标资源索引,如$media:company。

wants

目标跳转信息,包含包名、模块名、Ability名称及自定义参数(parameters)。

2、快捷入口跳转逻辑

import router from '@ohos.router';
export default class EntryAbility extends Ability {
  private context: UIAbilityContext | undefined;
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
    super.onCreate(want, launchParam);
    this.context = this.getContext();
    // 首次启动时加载首页
    router.pushUrl({
      url: 'pages/Index',
      context: this.context
    });
  }
  onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam) {
    const page = want.parameters?.page; // 提取快捷方式传递的参数
    if (page && this.context) {
      router.pushUrl({
        url: `pages/${page}`, // 动态拼接页面路径
        context: this.context
      });
    }
  }
}


注意

  1. 快捷方式数量:仅支持跳转至UIAbility入口页面,最多配置4个。
  2. 参数校验
    在onNewWant中增加参数非空校验,避免因快捷方式参数缺失导致应用崩溃:
if (!page || !this.context) {
  hilog.error(0x0000, 'Shortcut', 'Invalid parameters or context');
  return;
}
  1. 卡片:可展示动态内容,支持跳转至非入口页面。
目录
相关文章
|
4月前
|
物联网 开发工具
【HarmonyOS】鸿蒙应用蓝牙功能实现 (二)
【HarmonyOS】鸿蒙应用蓝牙功能实现 (二)
121 9
【HarmonyOS】鸿蒙应用蓝牙功能实现 (二)
|
4月前
|
开发工具
【HarmonyOS 5】使用openCustomDialog如何禁止手势关闭的方案
openCustomDialog提供了onWillDismiss回调函数,当用户尝试通过滑动、点击外部、返回键等操作关闭弹窗时,会触发该回调。通过在回调中判断关闭原因并拦截操作,即可实现禁止手势关闭的效果。
125 1
|
4月前
|
存储 安全 API
【HarmonyOS 5】鸿蒙应用隐私保护详解
【HarmonyOS 5】鸿蒙应用隐私保护详解
163 1
|
4月前
|
前端开发 JavaScript API
【HarmonyOS 5】鸿蒙跨平台开发方案详解(一)
2025年是鸿蒙生态迎来关键发展期。根据前几天的2025 HDC数据显示,鸿蒙原生应用数量已从2024年的2000款增长至5000款,微信鸿蒙版安装量突破1.2亿,公安部交管系统完成全国300城鸿蒙适配。
302 1
|
4月前
|
移动开发 Dart 前端开发
【HarmonyOS 5】鸿蒙跨平台开发方案详解(二)
作为最早实现鸿蒙适配的跨平台框架,Flutter在社区推动下已形成较完整的技术方案。当前鸿蒙版Flutter已发布3.22.0-ohos版本,该版本基于Flutter 3.22.0核心。
264 0
|
4月前
|
消息中间件 物联网 开发工具
【HarmonyOS 5】鸿蒙中如何使用MQTT
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是一种轻量级、基于发布 / 订阅(Publish/Subscribe)模式的即时通讯协议,专为资源受限的物联网(IoT)设备和低带宽、高延迟或不可靠网络环境设计。
238 0
|
4月前
|
传感器 自动驾驶 物联网
【HarmonyOS 5】鸿蒙星闪NearLink详解
鸿蒙星闪NearLink Kit 是 HarmonyOS 提供的短距离通信服务,支持星闪设备间的连接、数据交互。例如,手机可作为中心设备与外围设备(如鼠标、手写笔、智能家电、车钥匙等)通过星闪进行连接。
130 0
|
4月前
|
监控 JavaScript 开发工具
【HarmonyOS 5】鸿蒙中@State的原理详解
@State 是 HarmonyOS ArkTS 框架中用于管理组件状态的核心装饰器,其核心作用是实现数据驱动 UI 的响应式编程模式。通过将变量标记为 @State,开发者可以确保当状态值发生变化时,依赖该状态的 UI 组件会自动重新渲染,从而保持数据与界面的实时同步。 @State 是 HarmonyOS ArkTS 实现响应式编程的大基础核心,可以说整个V1和V2都是围绕它来进行组合使用。
166 0
|
4月前
|
人工智能 自然语言处理 IDE
【HarmonyOS 5】鸿蒙CodeGenie AI辅助编程工具详解
1、CodeGenie是什么? CodeGenie (代码精灵)作为鸿蒙DevEco IDE自带的AI辅助编码工具。
173 0
|
移动开发 安全 Android开发
【HarmonyOS 5】鸿蒙mPaaS详解
mPaaS 是 Mobile Platform as a Service 的缩写,即移动开发平台。
291 0