
一、Share Kit 分享服务
Share Kit为应用提供文本、图片、视频等内容跨应用、跨端分享能力。应用把需要分享的内容和预览样式配置给Share Kit,Share Kit将根据不同的场景进行使用:
-
应用间分享:根据数据类型、数量等信息构建分享面板
-
跨端分享:根据数据类型、数量等信息构建预览界面
二、先关说明
| 概念 |
说明 |
| 宿主应用 |
分享行为的发起者,通过调用分享接口展示分享面板 |
| 目标应用 |
分享内容的接收者,需构建数据处理能力并声明 |
| 内容区 |
显示分享内容标题、预览、选择等信息 |
| 推荐区 |
对接华为分享和意图框架,推荐能处理内容的设备和目标应用用户 |
| 分享方式区 |
通过包管理服务获取支持分享内容的目标应用 |
| 操作区 |
系统提供的复制、保存、另存为、打印等能力 |
三、运行机制
| 应用类型 |
相关逻辑 |
| 宿主应用 |
提供分享入口,配置分享内容,拉起系统分享面板 |
| 目标应用 |
构建数据处理能力组件,可选捐献联系人信息到意图框架 |
四、限制
4.1 设备限制
| 能力 |
手机 |
平板 |
PC/2in1 |
TV |
| 系统分享 |
支持 |
支持 |
支持 |
部分支持(仅分享到周边设备) |
| 碰一碰分享 |
支持 |
支持 |
支持 |
不支持 |
| 隔空传送 |
支持 |
支持 |
支持 |
不支持 |
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规范 |
| 接入模式 |
全接模式(系统面板)、半接模式(自定义面板+系统入口) |
所有评论(0)