-
-
[原创]【FAQ】HarmonyOS SDK 闭源开放能力 — Share Kit
-
发表于: 6小时前 106
-
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的配置信息如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | "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、示例配置代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | "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文件,点击分享可以在分享面板选择已完成上述配置的目标应用。