当前位置: 首页 > news >正文

鸿蒙 - 分享功能

文章目录

  • 一、背景
  • 二、app发起分享
    • 1. 通过分享面板进行分享
    • 2. 使用其他应用打开
  • 二、处理分享的内容
    • 1. `module.json5` 配置可接收分享
    • 2. 解析分享的数据

一、背景

在App开发中,分享是常用功能,这里介绍鸿蒙开发中,其他应用分享到自己的app中,或者自己的app分享给其他app
鸿蒙系统分享地址

二、app发起分享

1. 通过分享面板进行分享

  1. 导入相关模块。
import { common } from '@kit.AbilityKit';
import { systemShare } from '@kit.ShareKit';
import { uniformTypeDescriptor as utd } from '@kit.ArkData';
  1. 获取统一数据类型
    可以自己确定分享的类型,也可以调用方法通过后缀获取分享类型
    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}
  1. 构造分享数据,可添加多条分享记录。
let shareData: systemShare.SharedData = new systemShare.SharedData({utd: utdTypeId,uri: file.uri});
  1. 启动分享面板时,配置分享面板显示的位置信息或关联的组件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

  1. 配置entities添加 "entity.system.share"
"entities": ["entity.system.home","entity.system.share"],
  1. 配置actions,添加actions
"actions": ["action.system.home","ohos.want.action.select","ohos.want.action.sendData","ohos.want.action.viewData" // 必填,声明数据处理能力],
  1. 配置uris
"uris": [{"scheme": "file",// 物理存储类型的基类型"utd": "general.entity","maxFileSupported": 1,"linkFeature": "FileOpen"},{"scheme": "file",// 逻辑内容类型的基类型"utd": "general.object","maxFileSupported": 1,"linkFeature": "FileOpen"}]

2. 解析分享的数据

  1. 在其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)}
  1. 通过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') {}});}

处理完分享数据,即可将数据在页面显示

http://www.xdnf.cn/news/1258165.html

相关文章:

  • 【unity实战】使用Unity程序化生成3D随机地牢(附项目源码)
  • Redis 分布式Session
  • RAGAS:检索增强生成系统的无参考评估框架与技术解析
  • 知识随记-----Qt 实用技巧:自定义倒计时按钮防止用户频繁点击
  • Springboot2+vue2+uniapp 小程序端实现搜索联想自动补全功能
  • 数据结构----栈和队列认识
  • 为何毫米波需要采用不同的DPD方法?如何量化其值?
  • Java集合的遍历方式(全解析)
  • Mac/Windows跨平台PDF与AI高效解决方案
  • 数据分析——Pandas库
  • 解决React白板应用中的画布内容丢失问题
  • 哈希表——指针数组与单向链表的结合
  • (附源码)基于Web的物流信息管理系统
  • 【插件式微服务架构系统分享】之 解耦至上:gateway 网关与APISIX 网关的不同分工
  • 深入理解String类:揭秘Java字符串常量池的优化机制
  • 美图复现|Science:添加显著性的GO富集分析美图
  • python selenium环境安装
  • 飞算JavaAI深度解析:Java开发者的智能革命
  • Android Auto开发指南
  • mysql全屏终端全量、部分备份、恢复脚本
  • day28-NFS
  • Springboot2+vue2+uniapp 实现搜索联想自动补全功能
  • 《P3275 [SCOI2011] 糖果》
  • langchain入门笔记02:几个实际应用
  • 模拟-38.外观数列-力扣(LeetCode)
  • OpenCV 图像处理基础操作指南(一)
  • 「iOS」————自动释放池底层原理
  • React 中 useRef 使用方法
  • 接入小甲鱼数字人API教程【详解】
  • 透明矿山:科技重塑矿业未来