
【Share Kit 分享服务】系统分享目标应用匹配规则
系统分享是一项基础服务,实现了数据跨应用、跨设备分享的能力。
通过系统分享面板,用户可便捷的选择不同的分享渠道或能力,具体可查看:分享面板构成。
今天我们重点来聊一聊最常用的分享方式区,可以看到分享方式区并不支持应用自定义,那当分享发起时,哪些应用可以出现在分享方式区?它们的顺序又是如何排列的?今天我们一起来揭秘一下~
在此之前,我们首先要了解一个概念:UniformDataType(标准化数据类型)(后续简称:utd类型),定义了一个数据的基本类型及归属关系。它就是决定哪些应用可以出现在分享区的关键参数。
我们知道,分享的双方分别被定义为宿主应用(分享行为的发起者)和目标应用(分享内容的接收者),在定义分享能力时,双方都需要针对utd类型进行申明。
宿主应用接入分享(代码片段):
// 构造ShareData,需配置一条有效数据信息
let shareData: systemShare.SharedData = new systemShare.SharedData({
utd: utd.UniformDataType.TEXT,
content: '这是一段文本内容',
title: '文本内容',
description: '文本描述',
});
目标应用接入分享(代码片段):
"abilities": [
{
"name": "TestUIAbility",
"srcEntry": "./ets/entryability/TestUIAbility.ets",
"description": "$string:EntryAbility_desc",
"icon": "$media:layered_image",
"label": "$string:EntryAbility_label",
"startWindowIcon": "$media:startIcon",
"startWindowBackground": "$color:start_window_background",
"exported": true,
"skills": [
{
"actions": [
"ohos.want.action.sendData"
],
// 目标应用在配置支持接收的数据类型时,需穷举支持的UTD,比如:支持全部图片类型,可声明:general.image
// maxFileSupported 对于归属指定类型的文件,标识一次支持接收的最大数量。默认为0,代表不支持此类文件的分享。文件类型归属关系参考:@ohos.data.uniformTypeDescriptor (标准化数据定义与描述)
"uris": [
{
"scheme": "file",
"utd": "general.text",
"maxFileSupported": 1
}
]
}
]
}
]
通过以上代码片段可以看到,分享双方均申明了自己分享数据的utd类型和自己可接收数据的utd类型及数量。
当分享面板被拉起时,分享会整合所有数据的类型及数量,在已安装的应用列表内进行匹配,符合条件(接收方申明的数据类型及数量可以覆盖发送方的数据)的应用即可展示在分享面板。
具体的匹配规格可参数如下案例,我们用图片类型举例说明其匹配规则:
案例一:发送方数据类型:[{ utd: 'general.jpeg',number:2 }],表示分享一张图片,为jpeg类型。
case1:接收方申明可接收类型 { "utd": "general.jpeg", "maxFileSupported": 2 } ,支持接收(类型和数量完全满足条件)。
case2:接收方申明可接收类型 { "utd": "general.jpeg", "maxFileSupported": 3 } ,支持接收(类型匹配,数量满足条件)。
case3:接收方申明可接收类型 { "utd": "general.jpeg", "maxFileSupported": 1 } ,不支持接收(类型匹配,数量不满足条件)。
case4:接收方申明可接收类型 { "utd": "general.image", "maxFileSupported": 2 } ,支持接收(jpeg类型归属image类型,数量满足条件)。
case5:接收方申明可接收类型 { "utd": "general.video", "maxFileSupported": 2 } ,不支持接收(jpeg类型不属于video类型,数量满足条件)。
案例二:发送方数据类型:[{ utd: 'general.jpeg',number:1 }, { utd: 'general.png', number: 1 }],表示分享两张图片,一张为jpeg类型,另一张为png类型。
case1:接收方申明可接收类型 { "utd": "general.jpeg", "maxFileSupported": 2 } ,不支持接收(不支持接收png类型图片)。
case2:接收方申明可接收类型 { "utd": "general.image", "maxFileSupported": 2 } ,支持接收(满足2张图片的条件)。
case3:接收方申明可接收类型 { "utd": "general.image", "maxFileSupported": 1 } ,不支持接收(数量超过限制)。
case4:接收方申明可接收类型 { "utd": "general.jpeg", "maxFileSupported": 1 },{ "utd": "general.png", "maxFileSupported": 1 } ,支持接收(类型和数量均符合条件)。
case4:接收方申明可接收类型 { "utd": "general.image", "maxFileSupported": 1 },{ "utd": "general.png", "maxFileSupported": 1 } ,不支持接收(申明包含类型仅大类生效,即image配置生效,数量不符合条件)。
案例三:发送方数据类型:[{ utd: 'general.image',number:1 }],表示分享一张图片,不清楚具体的数据类型。
case1:接收方申明可接收类型 { "utd": "general.jpeg", "maxFileSupported": 2 } ,不支持接收(image类型不属于jpeg)。
case2:接收方申明可接收类型 { "utd": "general.media", "maxFileSupported": 2 } ,支持接收(image类型归属media)。
