一、Share Kit 分享服务
Share Kit为应用提供文本、图片、视频等内容跨应用、跨端分享能力。应用把需要分享的内容和预览样式配置给Share Kit,Share Kit将根据不同的场景进行使用:
-
应用间分享:根据数据类型、数量等信息构建分享面板
-
跨端分享:根据数据类型、数量等信息构建预览界面
二、先关说明
| 宿主应用 | 分享行为的发起者,通过调用分享接口展示分享面板 |
| 目标应用 | 分享内容的接收者,需构建数据处理能力并声明 |
| 内容区 | 显示分享内容标题、预览、选择等信息 |
| 推荐区 | 对接华为分享和意图框架,推荐能处理内容的设备和目标应用用户 |
| 分享方式区 | 通过包管理服务获取支持分享内容的目标应用 |
| 操作区 | 系统提供的复制、保存、另存为、打印等能力 |
三、运行机制
| 宿主应用 | 提供分享入口,配置分享内容,拉起系统分享面板 |
| 目标应用 | 构建数据处理能力组件,可选捐献联系人信息到意图框架 |
四、限制
4.1 设备限制
| 系统分享 | 支持 | 支持 | 支持 | 部分支持(仅分享到周边设备) |
| 碰一碰分享 | 支持 | 支持 | 支持 | 不支持 |
| 隔空传送 | 支持 | 支持 | 支持 | 不支持 |
4.2 使用限制
| 数据类型 | 须遵照UDMF(统一数据管理框架)定义的UTD(统一类型描述符)规范 |
| 数据量 | 单次分享配置数据总量不能超过200KB,分享条目总量不能超过500条 |
五、系统分享接入模式
| 全接模式 | 直接使用系统分享面板 | 华为自研应用,无商业诉求,降低开发成本 |
| 半接模式 | 自行开发分享能力面板,同时提供系统分享入口 | 有商业诉求,或有自己独有的业务逻辑 |
六、核心接口
| SharedData | constructor(record) | SharedData构造函数 |
| SharedData | addRecord(record) | 添加分享记录 |
| SharedData | getRecords() | 获取分享记录 |
| ShareController | constructor(data) | ShareController构造函数 |
| ShareController | show(context, options) | 显示分享面板 |
| ShareController | on('dismiss', callback) | 注册分享面板关闭事件监听 |
| ShareController | off('dismiss', callback) | 取消分享面板关闭事件监听 |
七、开发步骤
7.1 导入模块
import { common } from '@kit.AbilityKit';
import { systemShare } from '@kit.ShareKit';
import { uniformTypeDescriptor as utd } from '@kit.ArkData';
7.2 构造分享数据
// 构造ShareData,需配置一条有效数据信息
let data: systemShare.SharedData = new systemShare.SharedData({
utd: utd.UniformDataType.PLAIN_TEXT,
content: 'Hello HarmonyOS'
});
7.3 启动分享面板
// 构建ShareController
let controller: systemShare.ShareController = new systemShare.ShareController(data);
// 获取UIAbility上下文对象
let uiContext: UIContext = this.getUIContext();
let context: common.UIAbilityContext = uiContext.getHostContext() as common.UIAbilityContext;
// 注册分享面板关闭监听
controller.on('dismiss', () => {
console.info('Share panel closed');
});
// 方法一:配置分享面板关联的控件ID
controller.show(context, {
anchor: 'shareButtonId'
});
// 方法二:配置分享面板显示的坐标
controller.show(context, {
anchor: {
windowOffset: { x: 100, y: 100 }, // 相对锚点的窗体偏移值
size: { width: 0, height: 0 } // 组件的宽高
}
});
八、全接模式 vs 半接模式
| 分享面板 | 使用系统分享面板 | 自行开发分享面板 |
| 系统分享入口 | 直接使用 | 需提供入口按钮 |
| 开发成本 | 低 | 较高 |
| 商业诉求 | 无 | 有 |
核心要点
| 核心类 | SharedData(分享数据)、ShareController(分享面板控制器) |
| 数据限制 | 总量≤200KB,条目≤500条 |
| 数据类型 | 须遵循UTD规范 |
| 接入模式 | 全接模式(系统面板)、半接模式(自定义面板+系统入口) |




