文章目录
- 一、背景
- 二、app发起分享
- 1. 通过分享面板进行分享
- 2. 使用其他应用打开
- 二、处理分享的内容
- 1. `module.json5` 配置可接收分享
- 2. 解析分享的数据
一、背景
在App开发中,分享是常用功能,这里介绍鸿蒙开发中,其他应用分享到自己的app中,或者自己的app分享给其他app
鸿蒙系统分享地址
二、app发起分享
1. 通过分享面板进行分享
- 导入相关模块。
import { common } from '@kit.AbilityKit';
import { systemShare } from '@kit.ShareKit';
import { uniformTypeDescriptor as utd } from '@kit.ArkData';
- 获取统一数据类型
可以自己确定分享的类型,也可以调用方法通过后缀获取分享类型
getUniformDataTypeByFilenameExtension
let utdTypeId = ""if (file.extension.length == 0) {utdTypeId = utd.UniformDataType.FOLDER} else {utdTypeId = utd.getUniformDataTypeByFilenameExtension(file.extension, utd.UniformDataType.OBJECT);}if (utdTypeId.length == 0) {promptAction.showToast({message: appUtils.getResString('share_tip2')})return}
- 构造分享数据,可添加多条分享记录。
let shareData: systemShare.SharedData = new systemShare.SharedData({utd: utdTypeId,uri: file.uri});
- 启动分享面板时,配置分享面板显示的位置信息或关联的组件ID,面板将以Popup形式展示。
let controller: systemShare.ShareController = new systemShare.ShareController(shareData);// 获取UIAbility上下文对象let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;// 进行分享面板显示controller.show(context, {previewMode: systemShare.SharePreviewMode.DEFAULT,selectionMode: systemShare.SelectionMode.SINGLE});
2. 使用其他应用打开
通过context调用startAbility,弹出系统弹窗,使用其他应用打开文件
// Construct request data Want, taking opening a Word file as an examplelet wantInfo: Want = {uri: file.uri, // Indicate the URI path of the file to be opened, usually used in conjunction with typetype: 'application/msword', // Indicate the type of file to be openedflags: wantConstant.Flags.FLAG_AUTH_WRITE_URI_PERMISSION, // Authorization to perform write operations on URI}// Call the startAbility interface to open fileslet context = getContext(this) as common.UIAbilityContext;context.startAbility(wantInfo).then(() => {console.info("分享成功");}).catch((err: BusinessError) => {console.info("分享失败");})
二、处理分享的内容
1. module.json5
配置可接收分享
在module.json5
下找到 abilities
标签,找到 skills
- 配置entities添加
"entity.system.share"
"entities": ["entity.system.home","entity.system.share"],
- 配置actions,添加actions
"actions": ["action.system.home","ohos.want.action.select","ohos.want.action.sendData","ohos.want.action.viewData" // 必填,声明数据处理能力],
- 配置uris
"uris": [{"scheme": "file",// 物理存储类型的基类型"utd": "general.entity","maxFileSupported": 1,"linkFeature": "FileOpen"},{"scheme": "file",// 逻辑内容类型的基类型"utd": "general.object","maxFileSupported": 1,"linkFeature": "FileOpen"}]
2. 解析分享的数据
- 在其onCreate或onNewWant回调中获取传入的want参数
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET);// 注入Ability上下文到AppUtilsAppUtils.getInstance().context = this.context;hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onCreate');ShareManager.getInstance().handelShareData(want);}
onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {ShareManager.getInstance().handelShareData(want)}
- 通过
getSharedData
解析分享数据
/** 处理分享过来的文件 */public handelShareData(want: Want) {systemShare.getSharedData(want).then((data: systemShare.SharedData) => {data.getRecords().forEach((record: systemShare.SharedRecord) => {// 处理分享数据});}).catch((error: BusinessError) => {DKLogger.error(`Failed to getSharedData. Code: ${error.code}, message: ${error.message}`);// this.context.terminateSelf();if (want.action == 'ohos.want.action.sendData'|| want.action == 'ohos.want.action.viewData') {}});}
处理完分享数据,即可将数据在页面显示