HarmonyOS 鸿蒙Next中怎么实现多种分享方式?

HarmonyOS 鸿蒙Next中怎么实现多种分享方式? 选择分享方式-分享 里写着

应用有多种分享方式时,点击图标后需在菜单中选择一种子分享方式分享。应用需传入每个子分享方式的图标和名称。

但我找不到任何的 API 文档/ 指南文档有描述多种分享方式怎么实现。

previewableImage


更多关于HarmonyOS 鸿蒙Next中怎么实现多种分享方式?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

研究了两天才研究明白,没有一点资料。

1、做准备工作,需要在 entry/src/main/module.json5 下声明两个 type 为 share 的 extensionAbilitie(如果你想实现更多分享方式,你就创建更多 type 为 share 的 extensionAbilitie)

{
  "module": {
    "extensionAbilities": [
      {
        "name": "ShareAbility1",
        "srcEntry": "./ets/extensionability/ShareAbility1.ets",
        "type": "share", // 支持分享数据处理
        "icon": "$media:layered_image", // 分享方式图标
        "label": "$string:ShareAbility_label", // 分享方式文字
        "exported": true, // 可被其他应用拉起
        "skills": [
          {
            "actions": [
              "ohos.want.action.sendData"
            ],
            // 目标应用在配置支持接收的数据类型时,需穷举支持的UTD,比如:支持全部图片类型,可声明:general.image
            // maxFileSupported 对于归属指定类型的文件,标识一次支持接收的最大数量。默认为0,代表不支持此类文件的分享。文件类型归属关系参考:@ohos.data.uniformTypeDescriptor (标准化数据定义与描述)
            "uris": [
              {
                "scheme": "file",
                "utd": "general.text",
                "maxFileSupported": 1
              },
              {
                "scheme": "file",
                "utd": "general.png",
                "maxFileSupported": 1
              },
              {
                "scheme": "file",
                "utd": "general.jpeg",
                "maxFileSupported": 1
              }
            ]
          }
        ]
      },
      {
        "name": "ShareAbility2",
        "srcEntry": "./ets/extensionability/ShareAbility2.ets",
        "type": "share", // 支持分享数据处理
        "icon": "$media:layered_image", // 分享方式图标
        "label": "$string:ShareAbility2_label", // 分享方式文字
        "exported": true, // 可被其他应用拉起
        "skills": [
          {
            "actions": [
              "ohos.want.action.sendData"
            ],
            // 目标应用在配置支持接收的数据类型时,需穷举支持的UTD,比如:支持全部图片类型,可声明:general.image
            // maxFileSupported 对于归属指定类型的文件,标识一次支持接收的最大数量。默认为0,代表不支持此类文件的分享。文件类型归属关系参考:@ohos.data.uniformTypeDescriptor (标准化数据定义与描述)
            "uris": [
              {
                "scheme": "file",
                "utd": "general.text",
                "maxFileSupported": 1
              },
              {
                "scheme": "file",
                "utd": "general.png",
                "maxFileSupported": 1
              },
              {
                "scheme": "file",
                "utd": "general.jpeg",
                "maxFileSupported": 1
              }
            ]
          }
        ]
      }
    ],
  }
}

2、然后在 entry/src/main/ets 创建一个名为 extensionability 的文件夹,然后创建两个文件,分别名为 ShareAbility1.ets 和 ShareAbility2.ets(根据第一步的声明来确定名字),然后在文件里写入。

import { ShareExtensionAbility, UIExtensionContentSession, Want } from '@kit.AbilityKit';
import { systemShare } from '@kit.ShareKit';
import { BusinessError } from '@kit.BasicServicesKit';

export default class TestShareAbility1 extends ShareExtensionAbility {
  onSessionCreate(want: Want, session: UIExtensionContentSession) {
    systemShare.getSharedData(want)
      .then((data: systemShare.SharedData) => {
        data.getRecords().forEach((record: systemShare.SharedRecord) => {
          // 处理分享数据
        });
        session.loadContent('pages/Index');
      })
      .catch((error: BusinessError) => {
        console.error(`Failed to getSharedData. Code: ${error.code}, message: ${error.message}`);
        session.terminateSelf();
      });
  }
}

3、最后,把项目调试到手机上,长按一段文字/图片并分享,就能实现多种分享方式。

图片

更多关于HarmonyOS 鸿蒙Next中怎么实现多种分享方式?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,可通过Share模块实现多种分享。使用ShareAction类创建分享意图,指定ShareType(如文本、图片、文件)。调用startAbility()触发系统分享面板,用户可选择目标应用。支持分享到应用内指定页面,需配置want参数。分享文件需申请存储权限。

在HarmonyOS Next中,实现多种分享方式(即分享菜单中的子分享方式)的核心是使用 WantShareMenu 来构建一个包含多个分享选项的意图。

根据你提供的设计指南截图和描述,关键点在于:当应用有多种分享方式(例如“分享到微信好友”、“分享到朋友圈”、“复制链接”等)时,需要将这些方式作为子菜单项提供给用户选择。

虽然详细的API文档可能尚未完全公开,但实现思路基于标准的ArkUI扩展能力。主要步骤如下:

  1. 构建分享数据:首先,你需要准备要分享的数据,例如文本、链接或文件URI。这通常封装在一个 ShareData 对象中。

  2. 创建子分享方式 Want:为每一种具体的分享方式(子方式)创建一个 Want 对象。

    • 每个 Wantaction 可以设置为系统预定义的 ohos.want.action.selectShare 或你自定义的Action,用以标识这是一个分享选择操作。
    • Want 的参数(parameters)中,你需要为每个子方式设置两个关键信息:
      • 图标:通过 ohos.extra.param.key.share.icon 键设置一个 PixelMap 或资源ID。
      • 名称:通过 ohos.extra.param.key.share.name 键设置一个字符串,作为该子方式的显示名称(如“微信好友”)。
      • 同时,这个 Want 还应包含最终执行分享时所需的目标组件信息(如Ability名称、Bundle名等)。
  3. 组装 ShareMenu:创建一个 ShareMenu 对象,并将上一步创建的所有子分享方式 Want 对象添加到其中。

  4. 触发分享菜单:最后,通过 startAbility 或相关的UI交互接口(如 showShareMenu),触发系统分享菜单。系统会读取你提供的 ShareMenu,并将其中的每个子方式 Want 渲染为带图标和名称的菜单项。用户点击某个菜单项后,系统会启动对应的 Want 来完成分享。

代码结构示意(非完整可运行代码)

// 1. 准备分享数据
let shareData = {
  title: '分享标题',
  text: '分享内容',
  url: 'https://example.com'
};

// 2. 为每个子分享方式创建 Want
let wechatFriendWant = {
  action: 'ohos.want.action.selectShare',
  parameters: {
    'ohos.extra.param.key.share.icon': $r('app.media.wechat_icon'), // 图标资源
    'ohos.extra.param.key.share.name': '微信好友', // 显示名称
    // ... 其他执行分享到微信好友所需的参数,如目标Ability信息
  }
};
let copyLinkWant = {
  action: 'ohos.want.action.selectShare',
  parameters: {
    'ohos.extra.param.key.share.icon': $r('app.media.copy_icon'),
    'ohos.extra.param.key.share.name': '复制链接',
    // ... 执行复制链接操作所需的参数
  }
};

// 3. 创建 ShareMenu 并添加子方式
let shareMenu = {
  wants: [wechatFriendWant, copyLinkWant]
};

// 4. 在某个UI事件(如按钮点击)中触发分享菜单
// 通常需要将 shareData 和 shareMenu 绑定到触发动作上

总结来说,实现多种分享方式的关键在于为每个子方式构造一个带有特定图标和名称参数的 Want 对象,并将这些 Want 集合到一个 ShareMenu,最后由系统渲染为选择菜单。请关注官方即将发布的详细 ShareMenu API 文档以获取确切的接口定义和使用方法。

回到顶部