构造分享数据,添加一条分享记录。
let uiContext: UIContext = this.getUIContext(); let context: common.UIAbilityContext = uiContext.getHostContext() as common.UIAbilityContext; let thumbnail = await context.resourceManager.getRawFileContent('picture.png'); // 构造ShareData,需配置一条有效数据信息 let shareData: systemShare.SharedData = new systemShare.SharedData({ utd: utd.UniformDataType.HYPERLINK, uri: 'xxx', title: '测试', thumbnail: thumbnail });
此分享数据无法分享到应用,复现问题,复现场景。

再将SharedData中参数uri换成content。
let uiContext: UIContext = this.getUIContext(); let context: common.UIAbilityContext = uiContext.getHostContext() as common.UIAbilityContext; let thumbnail = await context.resourceManager.getRawFileContent('picture.png'); // 构造ShareData,需配置一条有效数据信息 let shareData: systemShare.SharedData = new systemShare.SharedData({ utd: utd.UniformDataType.HYPERLINK, content: 'xxx', title: '测试', thumbnail: thumbnail });
此时选择任一应用可以进行分享(此示例选择备忘录),分享成功如图。

content和uri二者至少有一个不为空。
如果是链接(包含App Linking)、文本类型的内容,SharedRecord中参数可设置为content。
import { systemShare } from '@kit.ShareKit'; import { uniformTypeDescriptor as utd } from '@kit.ArkData'; import { common } from '@kit.AbilityKit'; import { BusinessError } from '@kit.BasicServicesKit'; @Entry @Component struct SharePage { private async share() { let uiContext: UIContext = this.getUIContext(); let context: common.UIAbilityContext = uiContext.getHostContext() as common.UIAbilityContext; let thumbail = await context.resourceManager.getRawFileContent('img.png'); // 构造ShareData,需配置一条有效数据信息 let shareData: systemShare.SharedData = new systemShare.SharedData({ utd: utd.UniformDataType.HYPERLINK, // 实际内容根据开发者自行配置 content: 'xxx.xxx.com', title: '测试', thumbnail: thumbail }); let controller: systemShare.ShareController = new systemShare.ShareController(shareData); controller.show(context, { selectionMode: systemShare.SelectionMode.SINGLE, previewMode: systemShare.SharePreviewMode.DETAIL, }).then(() => { console.info('ShareController show success.'); }).catch((error: BusinessError) => { console.error(`ShareController show error. code: ${error.code}, message: ${error.message}`); }); } build() { Row() { Text('分享') Button('分享') .onClick(() => { this.share(); }) } .width('100%') .margin({ top: 12 }) .padding({ left: 20, right: 20 }) .justifyContent(FlexAlign.SpaceBetween) } }
Q:系统分享是否支持分享在线图片?
A:系统分享不支持分享在线图片,可以先将在线图片保存到本地后再分享。
Q:缩略图thumbnail有什么限制,为什么设置无效?
A:thumbnail限制图片大小:32KB以下。过大的图片可能导致want数据超限无法拉起分享,可使用ImagePacker.packing压缩图片质量。另外,当前规格2in1设备不支持缩略图。
Q:使用systemShare.getSharedData(want)获取分享的数据,报错1003703001,如何解决?
A:数据记录数量超过限制,可以不通过getSharedData接口获取分享数据,直接从want.uri属性,即分享的链接中,解析出分享的数据。
Q:API17的SDK版本下,在App中添加隔空抓取分享的功能,按照隔空传送API文档进行开发提示报错:Argument of type '"gesturesShare"' is not assignable to parameter of type '"knockShare"。这是什么原因?
A:隔空传送能力为HarmonyOS6.0版本新增特性,三方应用接入该能力需升级至HarmonyOS6.0版本。
Q:content和uri已确认完成配置,仍然提示文件不支持分享,还有可能是什么原因?
A:确认分享文件存在,请排查分享文件的路径或者权限。