【Share Kit 分享服务】系统分享目标应用匹配规则

帅气大叔945
发布于 2025-10-11 12:13
浏览
0收藏

​系统分享​​是一项基础服务,实现了数据跨应用、跨设备分享的能力。

通过系统分享面板,用户可便捷的选择不同的分享渠道或能力,具体可查看:​​分享面板构成​​。

今天我们重点来聊一聊最常用的分享方式区,可以看到分享方式区并不支持应用自定义,那当分享发起时,哪些应用可以出现在分享方式区?它们的顺序又是如何排列的?今天我们一起来揭秘一下~

在此之前,我们首先要了解一个概念:​​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)。

分类
标签
收藏
回复
举报
回复
    相关推荐