HarmonyOS鸿蒙Next轻木鱼Lite元服务中点击一键加桌的功能是怎么实现的?

HarmonyOS鸿蒙Next轻木鱼Lite元服务中点击一键加桌的功能是怎么实现的? 进入轻木鱼Lite 元服务后,点击上方“卡片加桌”按钮可以一键唤起卡片管理页面,这是通过什么方法实现的呢?


更多关于HarmonyOS鸿蒙Next轻木鱼Lite元服务中点击一键加桌的功能是怎么实现的?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

15 回复

更多关于HarmonyOS鸿蒙Next轻木鱼Lite元服务中点击一键加桌的功能是怎么实现的?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


项目名称

项目描述

  • 状态:进行中
  • 类型:开源
  • 语言:Python

目标

  • 学习Python编程
  • 分享代码

进度

  • 完成模块一
  • 开始模块二

联系方式

  • 邮箱:example@example.com
  • GitHub:用户名

按照步骤使用了:

# 调用接口,加载元服务加桌页面
productViewManager.loadService(uiContext, wantParam, callback);

其中loadService报错:This API is not supported in atomic service.
意思是这个 API 不支持元服务吗?

按照这儿的步骤进行的,

那应该是不支持,

  1. 楼主参考这个文档哦,我们自己的元服务添加卡片也是这样做的 FormMenu-系统预置UI组件库-ArkTS组件-ArkUI(方舟UI框架)-应用框架 - 华为HarmonyOS开发者
AddFormMenuItem(
  {
    bundleName: AppUtil.getBundleName(), // 包名
    abilityName: 'EntryFormAbility', // 模块ability名称
    parameters: {
      'ohos.extra.param.key.form_dimension': 1,
      'ohos.extra.param.key.form_name': 'formName',
      'ohos.extra.param.key.module_name': 'entry'
    },
  },
  "this is real id",
  {
    formBindingData: formBindingData.createFormBindingData({ data: 'share' }),
    callback: (error, formId) => {
      LogUtil.d(Tag, `callback info:error = ${JSON.stringify(error)}, formId = ${formId}`);
      if (error?.code === 0) {
        LogUtil.d(Tag, "添加至桌面成功")
      } else {
        LogUtil.d(Tag, "添加至桌面失败,请尝试其它添加方式")
      }
    },
    style: {
      options: {
        content: "立即体验", // 菜单内容,可以自己提供。默认使用"sys.string.ohos_add_form_to_desktop"
      }
    }
  }
)
.onTouch((event) => {
  if (event.type === TouchType.Down) {
    this.isDown = true

  } else if (event.type === TouchType.Up) {
    if (this.isDown) {
      HMRouterMgr.pop()
      const context = getContext(this) as common.UIAbilityContext;
      context.moveAbilityToBackground().then(() => {
        console.log(`moveAbilityToBackground success.`);
      }).catch((err: BusinessError) => {
        console.log(`moveAbilityToBackground error: ${err.message}.`);
      });
    }
    this.isDown = false
  }
})
.align(Alignment.Center)
.layoutWeight(1)
.padding(vertical(10))
  1. 这个类似于一个按钮能够添加卡片到桌面上

使用formProvider模块的openFormManager接口拉起系统统一的卡片管理页面:

import { formProvider } from '@kit.FormKit';

// 在按钮点击事件中调用接口
Button('卡片加桌').onClick(() => {
  formProvider.openFormManager()
})

这个方法会直接跳转至系统预设的卡片管理界面,用户可在此选择将卡片添加至桌面或负一屏。

只用您复制的这一小段就可以实现吗?我刚刚尝试了一下,


这一部分报错提醒:
Expected 1 arguments, but got 0. <ArkTSCheck>,

请问楼主实现了么

是不是少东西呢

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:BV1S4411E7LY/?p=17

这个是API18才可用的 你得版本估计不够高,

怪不得,

怪不得,

还没实现,并且又发现了新的问题,API 18 平板端是打不开的,上架审核测试人员也是打不开。

鸿蒙Next轻木鱼Lite的"一键加桌"功能主要通过Ability和FormExtensionAbility实现。具体流程:

  1. 使用FormExtensionAbility创建卡片模板
  2. 通过FormManager的addFormToHost()方法将卡片添加到桌面
  3. 调用requestForm()请求系统创建卡片
  4. 系统回调onFormAdd()完成卡片添加

关键代码涉及formId绑定、卡片尺寸配置和动态数据更新。权限方面需要声明ohos.permission.REQUIRE_FORM权限。

在HarmonyOS Next中,一键加桌功能是通过元服务卡片管理API实现的。具体实现步骤如下:

  1. 使用formHost模块的manageForms方法:
import formHost from '@ohos.app.form.formHost';

// 唤起卡片管理页面
formHost.manageForms((error, data) => {
  if (error) {
    console.error('Failed to manage forms. Cause: ' + error.message);
    return;
  }
  console.info('Succeeded in managing forms. Data: ' + JSON.stringify(data));
});
  1. 该方法会直接调起系统原生的卡片管理界面,用户可以在该界面选择添加卡片到桌面。

  2. 开发者需要先在config.json中正确配置卡片信息:

"forms": [
  {
    "name": "widget",
    "description": "轻木鱼卡片",
    "type": "JS",
    "jsComponentName": "widget",
    "colorMode": "auto",
    "isDefault": true,
    "updateEnabled": true,
    "scheduledUpdateTime": "10:30",
    "updateDuration": 1,
    "defaultDimension": "2*2",
    "supportDimensions": ["2*2"]
  }
]

注意:调用此API需要申请ohos.permission.REQUIRE_FORM权限。

回到顶部