写点什么

【FAQ】HarmonyOS SDK 闭源开放能力 — Share Kit

作者:HarmonyOS SDK
  • 2025-12-23
    贵州
  • 本文字数:2436 字

    阅读完需:约 8 分钟

1.问题描述:


分享的时候,如何获取精准的 utd 类型?


解决方案:


使用 Share Kit 时,宿主应用和目标应用定义数据类型须遵照UDMF(统一数据管理框架)定义的UTD(统一类型描述符)规范。


UTD 中定义的标准化数据类型在设计原则上按物理和逻辑分为两类:


  • 按物理分类的根节点为 general.entity,用于描述类型的物理属性,比如文件、目录等,具体可见图 1。

  • 按逻辑分类的根节点为 general.object,用于描述类型的功能性特征,如图片、网页等,具体可见图 2。


全部的数据类型可以参考:UTD基础类型表格


目标应用需要在应用配置文件(src/main/module.json5)的 skills 配置 actions 为 ohos.want.action.sendData,并且 uris 需穷举所有支持的数据类型。



"extensionAbilities": [
{
"name": "TestShareAbility",
"srcEntry": "./ets/abilities/TestShareAbility.ts",
"type": "share", // 支持分享数据处理
"description": "xxx",
"exported": true,
"label": "$string:xx_label",
"icon": "$media:icon",
"skills": [
{
"actions": [
"ohos.want.action.sendData"
],
// 目标应用在配置支持接收的数据类型时,需穷举支持的UTD
// 比如:支持全部图片类型,可声明:general.image,如支持全部数据类型,可声明:general.object
"uris": [
{
"scheme": "file",
"utd": "general.text",
"maxFileSupported": 1
},
{
"scheme": "file",
"utd": "general.png",
"maxFileSupported": 1
},
{
"scheme": "file",
"utd": "general.jpeg",
"maxFileSupported": 1
}
]
}
]
}
]
复制代码


2.问题描述:


如何判断设备是否支持碰一碰分享?


解决方案:


通过canIUse检测设备是否支持碰一碰能力:



if (canIUse('SystemCapability.Collaboration.HarmonyShare')) {
// 支持一碰分享的能力.
}
复制代码


3.问题描述:


如何获取用户点击了分享到哪个平台或者保存图片到本地事件?


解决方案:


参考:systemShare(分享)下的on('shareCompleted')接口,注册用户完成分享事件监听。返回用户分享渠道,可用于数据统计等。


4.问题描述:


目标应用已配置支持 png 和 jpeg 图片类型,但截屏分享时,分享方式区仍未显示目标应用。


解决方案:


目标应用在配置支持接收的数据类型时,需穷举支持的 utd。支持全部图片类型,可声明:general.image。


5.问题描述:


目标应用配置了 module.json5,但是发起分享时却找不到目标应用是什么原因


解决方案:


宿主应用发起分享时,需要确认发起的分享的数据类型是否和目标应用匹配。


例如宿主应用发起分享 AUDIO 类型数据:



let data: systemShare.SharedData = new systemShare.SharedData({
utd: utd.UniformDataType.AUDIO,
content: 'Hello HarmonyOS'
});
复制代码


目标应用需要配置 AUDIO 数据类型,配置 uri 可以参考上方解决方案:



{
"scheme": "file",
"utd": "general.audio",
"maxFileSupported": 1
}
复制代码


6.问题描述:


MP3 文件分享给外部,无可打开应用。


解决方案:


【问题描述】


在目标应用的 module.json5 文件中进行配置,但是分享面板的分享方式区没有目标应用可以进行选中分享。


1、目标效果:在文件管理中选择指定文件后,点击分享可以在分享面板中显示目标应用的图标并点击该图标进行文件分享;


2、实际效果:在文件管理中选择指定文件后,点击分享可以在分享面板中未显示目标应用的图标。


待分享的 module.json 的配置信息如下:



"module": {
"abilities": [
{
"skills": [
{
"actions": [
"ohos.want.action.sendData"
],
"uris": [
{
"scheme": "file",
"type": "application/caj"
},
{
"scheme": "file",
"type": "application/pdf"
},
{
"scheme": "file",
"type": "application/epub"
},
]
}
]
}
]
}
复制代码


【背景知识】


分享服务可以根据分享的数据类型、数量等信息构建分享面板,为用户提供内容预览、推荐分享联系人、关联应用及操作界面,便于用户快速选择分享应用或操作,将内容分发到目标应用。如果应用需要显示在分享面板,则需要构建数据处理能力并按照配置要求在应用配置文件中声明。


【问题定位】


分析 module.json5 文件的配置项发现 uris 数组中定义的是 type 字段,这个字段无法在使用分享服务时匹配目标应用从而导致目标应用未出现在分享面板的分享方式区。


【分析结论】


module.json5 文件中 uris 数组中定义了错误的字段 type 所以无法选择目标应用进行分享,需要设置 utd 字段并且取值为标准化数据类型。


【修改建议】


1、正确在目标应用的 module.json5 文件中声明 utd 字段并设置需要分享的文件所对应的标准数据化类型


2、示例配置代码如下:



"skills": [
{
"entities": [
"entity.system.home"
],
"actions": [
"action.system.home"
]
},
{
"actions": [
"action.system.home",
"ohos.want.action.viewData",
"ohos.want.action.sendData"
],
"uris": [
{
"scheme": "file",
//所有表示逻辑内容类型的基类型,
"utd": "general.object",
//标识一次能接收或打开的最大数量。,
"maxFileSupported": 1
}
]
}
]
复制代码


3、打开测试真机的文件管理,选择 pdf 文件,点击分享可以在分享面板选择已完成上述配置的目标应用。

用户头像

HarmonyOS SDK

关注

HarmonyOS SDK 2022-06-16 加入

HarmonyOS SDK通过将HarmonyOS系统级能力对外开放,支撑开发者高效打造更纯净、更智能、更精致、更易用的鸿蒙应用,和开发者共同成长。

评论

发布
暂无评论
【FAQ】HarmonyOS SDK 闭源开放能力 — Share Kit_HarmonyOS NEXT_HarmonyOS SDK_InfoQ写作社区