HarmonyOS鸿蒙Next中创建应用静态快捷方式可以动态配置吗?
HarmonyOS鸿蒙Next中创建应用静态快捷方式可以动态配置吗? 创建应用静态快捷方式可以像iOS那样让用户在应用内动态配置吗?自定义数目和顺序
从 API version 20 开始通过 《shortcutManager模块》 是可以做到应用内配置的。
数目可以配置很多,但最多起作用和显示的只有前4个。顺序依赖 shortcuts_config 配置文件配置顺序。
主要思路和步骤如下:
-
配置 shortcuts_config.json 里 《shortcuts标签》 的 visible 属性,作为应用安装默认显示与否。
-
实现“快捷配置中心”页面,shortcutManager 管理快捷项的添加和移除。核心方法代码如下:
// shortId为配置文件中的shortcuts标签下实际配置的shortcutId字段
setShortStatus(shortId:string):void{
if (deviceInfo.sdkApiVersion >= 20) {
//TODO 根据shortId获取存储的status
shortcutManager.setShortcutVisibleForSelf(shortId, !status)
.then(() => {
//TODO 存储status状态
}).catch((err: BusinessError) => {
console.error(`setShortcutVisibleForSelf errData is errCode:${err.code} message:${err.message}`);
});
} else {
// Fallback to an earlier version
}
}
优化体验:
① 在配置文件里第4个配置一个“添加更多快捷方式”项,这个跳转到快捷配置页面。
② 配合使用 《服务卡片Form Kit》(可直接跳转至非入口页面)
③ 配合使用 《桌面快捷方式》
希望帮得到你,实现时有问题再留言。如有用给个采纳。😊😊
更多关于HarmonyOS鸿蒙Next中创建应用静态快捷方式可以动态配置吗?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
我又确认到一个细节:普通应用公开的 shortcutManager 主要是“查询/显示控制”,而“新增、删除、查询全部桌面快捷方式”的那套接口在文档里标了系统接口。这样基本可以回答你了。结论先说:
不能把“静态快捷方式”做成像 iOS 那样由用户在应用内自由动态配置数量和顺序。
原因
HarmonyOS 里的静态快捷方式本质上是工程配置项,是在 shortcuts_config.json 里预先声明,再通过 module.json5 关联上的,不是运行时让用户随意编辑的一类对象。官方“创建应用静态快捷方式”文档就是按这种方式配置的,而且还说明了桌面最多展示 4 个。创建应用静态快捷方式
另外,公开的 shortcutManager 能力描述是“管理快捷方式是否显示等”,也就是偏查询/显隐控制;而“增加、删除、查询桌面快捷方式”那组接口在文档中标的是系统接口,不是普通应用通用开放能力。shortcutManager 模块说明 shortcutManager 系统接口说明
这意味着什么
如果你问的是:
1. 用户在应用里自己增减“静态快捷方式”数量
不行,静态快捷方式不是给用户运行时自由增删的。
2. 用户在应用里自己调整“静态快捷方式”顺序
通常也不行,至少不是 iOS 那种标准公开能力模型。 静态快捷方式的顺序本质上来自配置和系统展示策略,不是给应用开放一个运行时排序编辑器。
3. 应用能不能做一点“动态效果”
可以,但能力有限。
你现在能比较稳妥做的,通常是这类方案:
- 预置一组静态快捷方式
- 运行时根据场景隐藏/显示其中一部分
- 或者改走动态快捷方式思路,而不是静态快捷方式
官方文档里也提到可以通过 setShortcutVisibleForSelf 去隐藏或展示快捷方式,这说明普通应用公开能力更偏“显隐控制”,不是完全自定义编辑。创建应用静态快捷方式
如果你想实现“接近 iOS”的体验
可以考虑两种替代思路:
方案一:预置多个静态快捷方式 + 显隐控制
适合:
- 常用入口是固定集合
- 只需要根据用户偏好显示其中几个
缺点:
- 用户不能真正自由新增任意快捷项
- 排序能力也受限
方案二:改做动态快捷方式
文档里 ShortcutInfo 已区分快捷方式类型,且提到从 API version 23 开始支持动态快捷方式。ShortcutInfo 说明
但这里要注意:
- “支持动态快捷方式”不等于“完全具备 iOS 那种用户端可视化自由编排能力”
- 还要看你目标系统版本、公开 API、设备侧桌面实际支持情况
最终结论
一句话说:
静态快捷方式不能像 iOS 一样让用户在应用内动态自定义数目和顺序。 普通应用更适合做的是:
- 静态快捷方式的预配置
- 运行时显隐控制
- 或在合适版本上研究动态快捷方式,而不是把“静态快捷方式”本身做成可编辑模型
补充修正一下:如果是“运行时任意创建/改名/改图标/改排序”的动态快捷方式,静态配置本身仍不适合;但从 API version 20 开始,可以用 @kit.AbilityKit 里的 shortcutManager.setShortcutVisibleForSelf(id, visible) 控制当前应用已配置快捷方式是否显示。
落地方式是:先在 module.json5/快捷方式配置里预置若干个候选 shortcut,并设置好 shortcutId、label、icon、want 和顺序;应用内做一个“快捷入口设置页”,保存用户选择后调用 setShortcutVisibleForSelf(shortcutId, true/false) 控制显示隐藏。
注意它控制的是“已配置快捷方式的可见性”,不是动态生成全新的长按菜单项,也不能动态改已配置项的文案和图标。若希望用户自定义内容更丰富,服务卡片会更适合;若是把某个功能单独加到桌面,再评估桌面快捷方式能力。
官方接口参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-shortcutmanager
听着就是不可以的,但是鸿蒙好像有自己的逻辑来增加卡片,鸿蒙5是两个,鸿蒙6是10个
方案1:静态只做"壳",实际逻辑用参数区分
- 静态快捷方式里先固定配置4个入口(比如"快捷入口1/2/3/4")
- 真正的业务逻辑,通过 parameters里传的参数来区分
- 用户在应用内设置的顺序、功能,存在本地数据库里
- 快捷方式被拉起时,根据参数去读用户配置,跳转到对应的页面
- 缺点:没法改图标和文案,用户看不到自己设置的名称,体验差一点
方案2:用服务卡片(Form)来实现,更接近iOS的效果
这是官方推荐的替代方案,体验和能力都更好:
- 卡片可以完全由应用控制,动态渲染内容、图标和跳转逻辑
- 可以在应用内做设置,用户选择要展示的功能、调整顺序
- 桌面的卡片会跟着用户设置实时刷新,每个卡片都能跳转到不同页面
- 甚至可以做一个"自定义快捷栏"的卡片,用户自己拖顺序、开关功能
补充说明
HarmonyOS虽然有动态快捷方式的API,但大多是系统接口,普通应用拿不到权限,没法直接在桌面动态增删快捷方式图标。
如果指的是 module.json5 里配置的静态快捷方式,它随安装包配置生效,不适合做用户在应用内动态调整数量和顺序的入口。更稳的替代方案有两个:一是静态快捷方式只保留固定入口,点击后进入 Dispatcher 页面,再根据用户在应用内保存的偏好跳转;二是如果需求是把某个具体功能加到桌面,可以评估 AppGallery Kit 的快捷方式加桌能力,例如 checkPinShortcutPermitted 和 requestNewPinShortcut。
但这属于请求创建桌面快捷方式,不是修改长按图标菜单里的静态列表。
参考静态快捷方式文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/typical-scenario-configuration
前段时间刚调研过这个能力。首先,在 HarmonyOS 中,不能像 iOS 那样完全由用户在应用内动态、无限制地配置快捷方式(Shortcuts)的数目和顺序。
主要受限于系统框架的设计:
- IOS 的实现方式是在 代码中动态生成 (UIApplicationDelegate),HarmonyOS主要在 module.json5 静态配置;
- IOS 每次长按图标时实时请求最新列表,HarmonyOS 主要通过 addShortcut 添加固定入口。
如果你想让用户实现“类 iOS”的体验,可以采用以下折中方案:
方案一:
- 应用内设置页:提供一个“常用功能”设置页,让用户勾选 Top 4 的功能。
- 持久化存储:将用户的选择存入 Preferences。
- 启动页路由分发:
由于长按菜单是静态的,你可以将静态菜单的入口统一指向一个 DispatcherAbility。
DispatcherAbility 启动后,读取 Preferences 中用户配置的最新功能,直接跳转到对应页面。
- 利用 Widget(服务卡片):HarmonyOS 的服务卡片比快捷方式更强大。
你可以开发一个“多功能卡片”,允许用户在卡片上点击不同的按钮,或者通过卡片的“切换样式”功能来展示不同的功能入口。
方案二(没有试过):通过 shortcutManager.addShortcut 让用户把喜欢的功能单独生成桌面图标。
不支持
在HarmonyOS Next中,静态快捷方式通过shortcuts.json等配置文件声明,安装后固定,不支持运行时动态修改配置。若需动态配置,应使用shortcutManager相关API创建动态快捷方式。
静态快捷方式不支持动态配置。它在应用的 module.json5 文件中预先声明,安装后固定,无法在运行时由用户自定义数目、图标或顺序,也不允许运行时修改。
如需实现用户可自定义的快捷方式,应使用动态快捷方式。动态快捷方式通过 API(如 ShortcutManager)在应用内创建、更新、删除,完全支持自定义数量与排列,类似于 iOS 的 UIApplicationShortcutIcon 动态管理能力。



