HarmonyOS Next开发学习手册——通过startAbility拉起文件处理类应用

使用场景

开发者可以通过调用startAbility接口,由系统从已安装的应用中寻找符合要求的应用来实现打开特定文件的意图,例如:浏览器下应用下载PDF文件,可以调用此接口选择文件处理应用打开此PDF文件。开发者需要在请求中设置待打开文件的URI路径(uri)、文件格式(type)等字段,以便系统能够识别,直接拉起文件打开应用或弹出一个选择框,让用户选择合适的应用来打开文件,效果示意如下图所示。

图1 效果示意图

接口关键参数说明

开发者通过调用 startAbility 接口即可实现由已安装的垂域应用来打开文件。

表1 startAbility请求中want相关参数说明

参数名称类型是否必填说明
uristring表示待打开文件的URI路径,一般配合type使用。
uri格式为:file://bundleName/path
* file:文件URI的标志。
* bundleName:该文件资源的属主。* path:文件资源在应用沙箱中的路径。
typestring表示MIME type类型描述,打开文件的类型。比如:‘text/xml’ 、 'image/*'等,MIME定义请参见https://www.iana.org/assignments/media-types/media-types.xhtml?utm_source=ld246.com。
parametersRecord<string, Object>表示由系统定义,由开发者按需赋值的自定义参数,文件打开场景请参考表2。
flagsnumber表示处理方式,文件打开场景请参考表3。

表2 parameters 相关参数说明

参数名称类型说明
ability.params.streamstring指示携带的文件URI要授权给目标方,用于待打开的文件存在其他文件依赖的场景。例如打开本地html文件依赖本地其余资源文件的场景等。对应的value必须是string类型的文件URI数组。文件URI的获取参考表1中uri参数。
ohos.ability.params.showDefaultPickerstring表示在系统仅找到一个应用打开文件的场景下,是否需要展示选择文件打开方式的弹框来给用户选择。
* false:表示由系统策略或默认应用设置决定直接拉起文件打开应用还是展示弹框。
* true:表示始终展示弹框。缺省为false。

表3  flags 相关参数说明

参数名称说明
FLAG_AUTH_READ_URI_PERMISSION0x00000001指对URI执行读取操作的授权。
FLAG_AUTH_WRITE_URI_PERMISSION0x00000002指对URI执行写入操作的授权。

接入步骤

调用方接入步骤

  1. 导入相关模块。
// xxx.ets
import { fileUri } from '@kit.CoreFileKit';
import { UIAbility, Want, common, wantConstant } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServiceKit';
  1. 获取 应用上下文Context 。
// xxx.ets
// 假设应用bundleName值为com.example.demo
export default class EntryAbility extends UIAbility {
onWindowStageCreate(windowStage: window.WindowStage) {// 获取文件沙箱路径let filePath = this.context.filesDir + '/test1.txt';// 将沙箱路径转换为urilet uri = fileUri.getUriFromPath(filePath);// 获取的uri为"file://com.example.demo/data/storage/el2/base/files/test.txt"
}
// ...
}
  1. 构造请求数据。
// xxx.ets
export default class EntryAbility extends UIAbility {
onWindowStageCreate(windowStage: window.WindowStage) {// 获取文件沙箱路径let filePath = this.context.filesDir + '/test.txt';// 将沙箱路径转换为urilet uri = fileUri.getUriFromPath(filePath);// 构造请求数据let want: Want = {uri: uri,type: 'text/plain', // 表示待打开文件的类型// 配置被分享文件的读写权限,例如对文件打开应用进行读写授权flags: wantConstant.Flags.FLAG_AUTH_WRITE_URI_PERMISSION | wantConstant.Flags.FLAG_AUTH_READ_URI_PERMISSION};
}
// ...
}
  1. 调用接口启动。
// xxx.ets
export default class EntryAbility extends UIAbility {
onWindowStageCreate(windowStage: window.WindowStage) {// 获取文件沙箱路径let filePath = this.context.filesDir + '/test.txt';// 将沙箱路径转换为urilet uri = fileUri.getUriFromPath(filePath);// 构造请求数据let want: Want = {uri: uri,type: 'text/plain', // 表示待打开文件的类型// 配置被分享文件的读写权限,例如对文件打开应用进行读写授权flags: wantConstant.Flags.FLAG_AUTH_WRITE_URI_PERMISSION | wantConstant.Flags.FLAG_AUTH_READ_URI_PERMISSION};// 调用接口启动this.context.startAbility(want).then(() => {console.info('Succeed to invoke startAbility.');}).catch((err: BusinessError) => {console.error(`Failed to invoke startAbility, code: ${err.code}, message: ${err.message}`);});
}
// ...
}

目标方接入步骤

  1. 声明文件打开能力

支持打开文件的应用需要在module.json5配置文件中声明文件打开能力。其中uris字段表示接收URI的类型,其中scheme固定为file。type字段表示支持打开的文件类型(请参见MIME定义),如下举例中类型为txt文件。

{
"module": {// ..."abilities": [{// ..."skills": [{"actions": ["ohos.want.action.viewData" // 必填,声明数据处理能力],"uris": [{// 允许打开uri中以file://协议开头标识的本地文件"scheme": "file", // 必填,声明协议类型为文件"type": "text/plain", // 必填,表示支持打开的文件类型"linkFeature": "FileOpen" // 必填,表示此URI的功能为文件打开}// ...]// ...}]}]
}
}
  1. 应用处理待打开文件。

声明了文件打开的应用在被拉起后,获取传入的Want参数信息,从中获取待打开文件的URI,在打开文件并获取对应的file对象后,可对文件进行读写操作。

// xxx.ets
import fs from '@ohos.file.fs';
import { Want } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServiceKit';export default class EntryAbility extends UIAbility {onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {// 从want信息中获取uri字段let uri = want.uri;if (uri == null || uri == undefined) {console.info('uri is invalid');return;}try {// 根据待打开文件的URI进行相应操作。例如同步读写的方式打开URI获取file对象let file = fs.openSync(uri, fs.OpenMode.READ_WRITE);console.info('Succeed to open file.');} catch (err) {let error: BusinessError = err as BusinessError;console.error(`Failed to open file openSync, code: ${error.code}, message: ${error.message}`);}}
}

鸿蒙全栈开发全新学习指南

也为了积极培养鸿蒙生态人才,让大家都能学习到鸿蒙开发最新的技术,针对一些在职人员、0基础小白、应届生/计算机专业、鸿蒙爱好者等人群,整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开发技术的学习路线【包含了大厂APP实战项目开发】

本路线共分为四个阶段:

第一阶段:鸿蒙初中级开发必备技能

在这里插入图片描述

第二阶段:鸿蒙南北双向高工技能基础:gitee.com/MNxiaona/733GH

第三阶段:应用开发中高级就业技术

第四阶段:全网首发-工业级南向设备开发就业技术:gitee.com/MNxiaona/733GH

鸿蒙开发面试真题(含参考答案):gitee.com/MNxiaona/733GH

写在最后

  • 如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
  • 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。
  • 想要获取更多完整鸿蒙最新学习资源,请移步前往小编:gitee.com/MNxiaona/733GH

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/35295.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

0625_ARM2

练习&#xff1a; 汇编实现1-100累加&#xff0c;结果保存在r0 .text .global _start start:mov r0,#0mov r1,#1b loop loop:add r0,r0,r1add r1,r1,#1cmp r1,#101bne loop .end思维导图&#xff1a;

C#——SortedList 排序列表详情

SortedList 排序列表 SortedList 类用来表示键/值对的集合&#xff0c;这些键/值对按照键值进行排序&#xff0c;并且可以通过键或索引访问集合中的各个项。 我们可以将排序列表看作是数组和哈希表的组合&#xff0c;其中包含了可以使用键或索引访问各项的列表。如果您使用索…

AI文档助手:提升文档处理效率

随着人工智能技术的飞速发展&#xff0c;AI文档助手已经成为我们提升工作效率的重要工具。小编就来和大家分享几款AI文档助手&#xff0c;它们能够通过智能化的功能帮助我们快速、准确地完成各种文档任务。 1.百度文库AI助手 百度文库AI助手是百度基于文心一言重构的一站式智能…

全景图片/老照片/动漫图片一键无损放大与修复

在日常生活中&#xff0c;我们经常使用系统自带的图片处理软件来对图片进行缩放操作&#xff0c;从而实现放大或缩小图片。然而&#xff0c;这种方法会带来一个问题&#xff1a;如果原始图片较小&#xff0c;放大后会导致精度损失&#xff0c;使图片变得模糊。 近年来&#xf…

vue uniapp MEQX JWT认证

1.下载依赖 npm install mqttimport * as mqtt from "mqtt/dist/mqtt.min" ​ 我是用的uniapp vue3 vite这里尝试了很多方式,都导入不进去后来我就采用的本地引入方式, 把mqtt.min.js下载到本地然后在index.html 中导入<script src"./MEQX/mqtt.js" typ…

rapidocr-onnxruntime库及在open-webui上传PDF 图像处理 (使用 OCR)应用

背景 rapidocr-onnxruntime是一个跨平台的OCR库&#xff0c;基于ONNXRuntime推理框架。 目前已知运行速度最快、支持最广&#xff0c;完全开源免费并支持离线快速部署的多平台多语言OCR。 缘起&#xff1a;百度paddle工程化不是太好&#xff0c;为了方便大家在各种端上进行oc…

一款强大的上位机模拟通讯工具----HslCommunicationDemo

目录 引言 工具概述 官网下载链接 安装步骤 使用教程 引言 在工业自动化和机器人控制领域&#xff0c;上位机模拟通讯工具是工程师和开发者日常工作中不可或缺的一部分。这些工具不仅能帮助我们验证设备间的通信状态&#xff0c;还能在设备调试和集成过程中提供极大的便利。…

38.控制功能实现

上一个内容&#xff1a;37.添加简易的调试功能 以 37.添加简易的调试功能 它的代码为基础进行修改 效果图&#xff1a; 下图红框位置的功能实现 Dlls项目中添加一个Dialog Dialog如下 然后给它添加一个类&#xff0c;MFC添加的类可能会报错添加 #include "afxdialogex.h…

聚酰胺-酰亚胺(PAI)应用前景广阔 酰氯法和异氰酸酯法为其主流制备方法

聚酰胺-酰亚胺&#xff08;PAI&#xff09;应用前景广阔 酰氯法和异氰酸酯法为其主流制备方法 聚酰胺-酰亚胺又称PAI&#xff0c;是一种分子链呈酰亚胺环和酰胺键有规则交替排列的高性能热塑性树脂。PAI具有耐磨耗性能好、摩擦系数低、尺寸稳定性好、耐高温、耐辐射、化学稳定性…

如何选择OLED弧形屏厂家

在选择OLED弧形屏厂家时&#xff0c;为确保采购到高质量且符合需求的产品&#xff0c;需要综合考虑多个因素。以下是一份详细的指南&#xff0c;帮助您清晰、系统地选择OLED弧形屏厂家&#xff1a; 一、技术实力 研发能力&#xff1a;了解厂家在OLED显示技术方面的研发能力&…

亮数据,一款新的低代码爬虫利器!

在当今数据驱动型时代&#xff0c;数据采集和分析能力算是个人和企业的核心竞争力。然而&#xff0c;手动采集数据耗时费力且效率低下&#xff0c;而且容易被网站封禁。 我之前使用过一个爬虫工具&#xff0c;亮数据&#xff08;Bright Data&#xff09; &#xff0c;是一款低…

力扣随机一题 哈希表 排序 数组

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 2491.划分技能点相等的团队【中等】 题目&#xff1a; 给你一个正整数数组…

【深海王国】小学生都能玩的单片机?零基础入门单片机Arduino带你打开嵌入式的大门!(9)

Hi٩(๑o๑)۶, 各位深海王国的同志们&#xff0c;早上下午晚上凌晨好呀~辛勤工作的你今天也辛苦啦 (o゜▽゜)o☆ 今天大都督继续为大家带来系列——小学生都能玩的单片机&#xff01;带你一周内快速走进嵌入式的大门&#xff0c;let’s go&#xff01; &#xff08;9&#x…

殷山:摩斯大模型隐私保护技术和应用探索

背景介绍 6月20日下午&#xff0c;“2024信通院数据智能大会”圆满落幕&#xff0c;摩斯技术负责人殷山在论坛上分享了摩斯在大模型隐私保护技术和行业应用的探索。 殷山发表“大模型隐私保护”主题演讲 摩斯技术负责人殷山在“数据智能安全主题论坛“上&#xff0c;带来“大…

NIVision-LabVIEW在灰度图上画圆

问题来源 在csdn上看到的这样一个问题&#xff0c;好像也没个正经答案&#xff0c;都用chatGPT回答&#xff0c;挺没劲的。不说提供个vi源代码&#xff0c;至少也来张截图嘛。我想着问题也不难&#xff0c;就自己动动手吧。 代码展示1 1、首先使用imaq ArrayToImage.vi创建了一…

java error ConcurrentModificationException 并发修改异常

ConcurrentModificationException 概述 这个异常在 Java 中通常发生在以下场景&#xff1a;当某个线程在遍历一个集合&#xff08;如 ArrayList、HashMap 等&#xff09;的过程中&#xff0c;另一个线程尝试修改这个集合的结构&#xff08;如添加、删除元素&#xff09;&#…

sheng的学习笔记-AI-学习向量量化

AI目录 sheng的学习笔记-AI目录-CSDN博客 需要学习前置知识&#xff1a;聚类&#xff0c;可参考 sheng的学习笔记-AI-聚类(Clustering)-CSDN博客 什么是学习向量量化 “学习向量量化”&#xff08;Learning Vector Quantization&#xff0c;简称LVQ&#xff09;是试图找到一…

Qt | 子类化 QStyle(Qt自带图标大全)

01、简介 1、把绘制自定义部件外观的步骤大致分为三大板块,如下: ①、样式元素:即指定需要绘制的图形元素(比如焦点框、按钮,工具栏等)。样式元素使 用 QStyle 类中的一系列枚举(共有 11 个枚举)进行描述。 ②、样式选项:包含了需要绘制的图形元素的所有信息,比如包含…

Tomcat 下载部署到 idea

一、下载Tomcat Tomcat 是Apache 软件基金会&#xff08;Apache Software Foundation&#xff09;下的一个核心项目&#xff0c;免费开源、并支持Servlet 和JSP 规范。属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发…

启动VMWare虚拟机报错

1. 无法打开内核设备“\\.\VMCIDev\VMX”: 操作成功完成。是否在安装 VMware Workstation 后重新引导? 模块“DevicePowerOn”启动失败。 未能启动虚拟机。 解决办法: 解决办法: 将 Ubuntu 64 位.vmx 找到vmci0.present"TRUE"这行改成 vmci0.present "FAL…