HarmonyOS 鸿蒙Next中添加桌面卡片

HarmonyOS 鸿蒙Next中添加桌面卡片 采用鸿蒙6ArkTS编写租金管理系统,环境为HarmonyOS 6.0.2 Release SDK, OpenHarmony SDK Ohos_sdk_public 6.0.2.130 (API Version 22 Release) ,想实现点击"设置通知租金卡片"文本,弹出选择1×2、2×2、4×4三种尺寸的元服务桌面卡片(三种卡片功能已编写好)添加至桌面窗口(如同图片内容)


更多关于HarmonyOS 鸿蒙Next中添加桌面卡片的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

formProvider.openFormManager(want: Want): void

打开当前应用的卡片管理页面。

文档: [@ohos.app.form.formProvider (formProvider)-ArkTS API-Form Kit(卡片开发服务)](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-app-form-formprovider#formprovideropenformmanager18)

更多关于HarmonyOS 鸿蒙Next中添加桌面卡片的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


这个场景可以用 Form Kit 的 formProvider.openFormManager(want) 打开当前应用的卡片管理页面,让用户选择并添加卡片。你要做 1x2、2x2、4x4 三种尺寸,关键是 form_config.json 里先把对应卡片名称、尺寸、FormExtensionAbility 配好,然后打开时通过 want 参数指定默认展示哪张卡片。

want 里通常需要包含:bundleName、abilityName,以及 parameters 中的 ohos.extra.param.key.form_dimensionohos.extra.param.key.form_nameohos.extra.param.key.module_name。如果参数不完整或指定卡片不存在,系统会展示默认卡片。

注意:应用只能拉起系统卡片管理/添加流程,最终是否添加、添加到哪个桌面位置由用户确认,不能在应用内静默把卡片直接放到桌面。

在HarmonyOS NEXT中,添加桌面卡片需基于ArkTS开发。步骤如下:

  1. 创建FormAbility,继承自Ability,重写onCreateForm返回卡片绑定对象。
  2. 编写卡片UI,使用@Component@Entry装饰,通过@State管理数据。
  3. module.json5中配置forms数组,指定卡片名称、类型、更新策略(如updateDuration)。
  4. 在桌面长按应用图标,选择“服务卡片”添加已定义的卡片。

无需Java或C,仅ArkTS/声明式UI。

你可以通过以下方式实现点击文本弹出尺寸选择并添加对应卡片到桌面。

  1. 核心 API
    使用 @ohos.app.form.formHost 模块的 requestForm 接口,可在桌面添加已实现的卡片。

  2. 关键步骤

  • EntryAbility 或页面中,点击“设置通知租金卡片”文本时,弹出 ActionSheet 或自定义对话框列出 1×2、2×2、4×4 尺寸。
  • 每个尺寸对应一个 Form 名称,需预先在 form_config.json 中声明。
  • 选择尺寸后,调用 formHost.requestForm,传入卡片 ID、包名、对应 Form 名称、尺寸以及你想置入的临时数据。
  1. 权限与配置
  • module.json5 中添加 ohos.permission.REQUIRE_FORM 权限。
  • 确保已注册卡片:src/main/ets/formability/ 下实现 FormExtensionAbility,并在配置文件里声明。
  1. 代码示例(页面内处理)
import { formHost } from '@kit.FormKit';
import { promptAction } from '@kit.ArkUI';

@Entry
@Component
struct Index {
  private getFormName(size: string): string {
    if (size === '1x2') return 'Form1x2'; // 与form_config.json中name一致
    if (size === '2x2') return 'Form2x2';
    return 'Form4x4';
  }

  private addCard(size: string) {
    let bundleName = getContext().bundleName;
    let moduleName = 'entry';        // 实际模块名
    let formName = this.getFormName(size);
    let dimension = size === '4x4' ? 4 : (size === '2x2' ? 2 : 1);
    let formId = `${Date.now()}`;     // 生成唯一ID
    let want = {
      bundleName: bundleName,
      moduleName: moduleName,
      abilityName: 'EntryAbility',  // 主 Ability 名称
      parameters: {
        'ohos.extra.param.key.form_dimension': dimension
      }
    };

    formHost.requestForm(formId, formName, want).then(() => {
      promptAction.showToast({ message: '卡片已添加' });
    }).catch((err: Error) => {
      promptAction.showToast({ message: '添加失败: ' + err.message });
    });
  }

  build() {
    Column() {
      Text('设置通知租金卡片')
        .onClick(() => {
          ActionSheet.show({
            title: '选择卡片尺寸',
            sheets: [
              { title: '1×2', action: () => this.addCard('1x2') },
              { title: '2×2', action: () => this.addCard('2x2') },
              { title: '4×4', action: () => this.addCard('4x4') }
            ]
          });
        })
    }
  }
}

注意

  • 不同尺寸的卡片必须在 form_config.json 中分别配置 formConfigAbility 指向同一个 FormExtensionAbility,通过 formName 区分。
  • requestFormformId 需要应用侧保证唯一,后续更新卡片时使用。
  • 效果如同系统“添加卡片”流程,会直接唤起桌面并将卡片放置到屏幕。
回到顶部