文章目錄
- 一、背景
- 二、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') {}});}
處理完分享數據,即可將數據在頁面顯示