HarmonyOS鸿蒙Next中如何在应用运行时动态的添加应用快捷入口?

HarmonyOS鸿蒙Next中如何在应用运行时动态的添加应用快捷入口? 如何在应用运行时,动态的添加应用快捷入口?

3 回复

一、结论

除了预先配置的静态快捷方式,还可以在应用内通过代码动态添加快捷方式(如用户点击“添加到桌面”按钮时创建),灵活性更高。

import { hilog } from "@kit.PerformanceAnalysisKit";
import { BusinessError } from "@kit.BasicServicesKit";
import { productViewManager } from "@kit.StoreKit";
import { common, Want } from "@kit.AbilityKit";
import promptAction from '@ohos.promptAction';

export class ShortcutsUtils {
  /**
   * 点击按钮添加快捷方式
   */
  static addShortcuts() {
    const uiContext = getContext() as common.UIAbilityContext;
    const shortcutId = "id_test1"; // 需与 shortcuts_config.json 中定义的一致
    const labelResName = "shortcut"; // 对应 label 的资源索引名称
    const iconResName = "aa_icon"; // 对应 icon 的资源索引名称
    const want: Want = {
      bundleName: "com.example.appgallery.kit.demo",
      moduleName: "entry",
      abilityName: "EntryAbility",
      parameters: {
        testKey: "testValue" // 自定义参数
      }
    };

    try {
      // 校验快捷方式是否可添加(是否已存在、是否有权限)
      productViewManager.checkPinShortcutPermitted(uiContext, shortcutId, want, labelResName, iconResName)
        .then((result) => {
          hilog.info(0x0001, 'addShortcuts', `校验成功:${JSON.stringify(result)}`);
          const tid = result.tid;
          // 发起添加快捷方式请求
          productViewManager.requestNewPinShortcut(uiContext, tid)
            .then(() => {
              hilog.info(0x0001, 'addShortcuts', "快捷方式添加成功!");
            })
            .catch((error: BusinessError) => {
              hilog.error(0x0001, 'addShortcuts', `快捷方式添加失败:${error.code}, ${error.message}`);
            });
        })
        .catch((error: BusinessError) => {
          hilog.error(0x0001, 'addShortcuts', `err:${error.code}, ${error.message}`);
          // 错误码 1006620003 表示快捷方式已存在
          if (error.code === 1006620003) {
            promptAction.showToast({ message: '桌面已存在此快捷方式!' });
          }
        });
    } catch (err) {
      hilog.error(0x0001, 'TAG', `catch err:${err.code}, ${err.message}`);
    }
  }

二、使用方式

在应用页面的按钮点击事件中调用工具类方法,即可触发快捷方式添加流程:

Button('添加测试快捷方式')
  .onClick(() => {
    ShortcutsUtils.addShortcuts();
  })

三、注意:

productViewManager允许应用添加快捷方式的数量为两个。这不是bug,是鸿蒙系统的设计如此。

更多关于HarmonyOS鸿蒙Next中如何在应用运行时动态的添加应用快捷入口?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,可通过ShortcutManager接口动态添加应用快捷入口。使用addShortcut()方法,传入ShortcutInfo对象,该对象需包含快捷方式ID、图标、标签及目标Ability信息。系统会自动在桌面生成对应快捷图标。

在HarmonyOS Next中,可以通过ShortcutManager服务在应用运行时动态添加快捷入口。具体步骤如下:

  1. 获取ShortcutManager实例

    import shortcutManager from '[@ohos](/user/ohos).shortcutManager';
    let shortcutManager = shortcutManager.getShortcutManager();
    
  2. 创建ShortcutInfo对象

    let shortcutInfo: shortcutManager.ShortcutInfo = {
      shortcutId: "dynamic_shortcut_1",
      label: "动态入口",
      icon: { id: 0x1000000 }, // 图标资源
      intent: {
        bundleName: "com.example.myapp",
        abilityName: "EntryAbility"
      }
    };
    
  3. 添加快捷方式

    shortcutManager.addShortcuts([shortcutInfo]).then(() => {
      console.log('快捷入口添加成功');
    }).catch((err) => {
      console.error('添加失败: ' + JSON.stringify(err));
    });
    

注意事项

  • 需要在module.json5配置文件中声明ohos.permission.SET_SHORTCUT权限
  • 动态快捷方式数量有限制(通常最多4个)
  • 图标建议使用资源ID引用,确保图标合规性
  • 应用卸载时所有快捷方式会自动清除

此方法适用于需要根据用户行为或应用状态动态创建快捷入口的场景,如电商应用的商品收藏、阅读应用的书签等。

回到顶部