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

打印 上一主题 下一主题

主题 875|帖子 875|积分 2625

利用场景

开发者可以通过调用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
  2. import { fileUri } from '@kit.CoreFileKit';
  3. import { UIAbility, Want, common, wantConstant } from '@kit.AbilityKit';
  4. import { BusinessError } from '@kit.BasicServiceKit';
复制代码

  • 获取 应用上下文Context 。
  1. // xxx.ets
  2. // 假设应用bundleName值为com.example.demo
  3. export default class EntryAbility extends UIAbility {
  4. onWindowStageCreate(windowStage: window.WindowStage) {
  5.     // 获取文件沙箱路径
  6.     let filePath = this.context.filesDir + '/test1.txt';
  7.     // 将沙箱路径转换为uri
  8.     let uri = fileUri.getUriFromPath(filePath);
  9.     // 获取的uri为"file://com.example.demo/data/storage/el2/base/files/test.txt"
  10. }
  11. // ...
  12. }
复制代码

  • 构造哀求数据。
  1. // xxx.ets
  2. export default class EntryAbility extends UIAbility {
  3. onWindowStageCreate(windowStage: window.WindowStage) {
  4.     // 获取文件沙箱路径
  5.     let filePath = this.context.filesDir + '/test.txt';
  6.     // 将沙箱路径转换为uri
  7.     let uri = fileUri.getUriFromPath(filePath);
  8.     // 构造请求数据
  9.     let want: Want = {
  10.     uri: uri,
  11.     type: 'text/plain', // 表示待打开文件的类型
  12.     // 配置被分享文件的读写权限,例如对文件打开应用进行读写授权
  13.     flags: wantConstant.Flags.FLAG_AUTH_WRITE_URI_PERMISSION | wantConstant.Flags.FLAG_AUTH_READ_URI_PERMISSION
  14.     };
  15. }
  16. // ...
  17. }
复制代码

  • 调用接口启动。
  1. // xxx.ets
  2. export default class EntryAbility extends UIAbility {
  3. onWindowStageCreate(windowStage: window.WindowStage) {
  4.     // 获取文件沙箱路径
  5.     let filePath = this.context.filesDir + '/test.txt';
  6.     // 将沙箱路径转换为uri
  7.     let uri = fileUri.getUriFromPath(filePath);
  8.     // 构造请求数据
  9.     let want: Want = {
  10.     uri: uri,
  11.     type: 'text/plain', // 表示待打开文件的类型
  12.     // 配置被分享文件的读写权限,例如对文件打开应用进行读写授权
  13.     flags: wantConstant.Flags.FLAG_AUTH_WRITE_URI_PERMISSION | wantConstant.Flags.FLAG_AUTH_READ_URI_PERMISSION
  14.     };
  15.     // 调用接口启动
  16.     this.context.startAbility(want)
  17.     .then(() => {
  18.         console.info('Succeed to invoke startAbility.');
  19.     })
  20.     .catch((err: BusinessError) => {
  21.         console.error(`Failed to invoke startAbility, code: ${err.code}, message: ${err.message}`);
  22.     });
  23. }
  24. // ...
  25. }
复制代码
目标方接入步调


  • 声明文件打开本事
支持打开文件的应用需要在module.json5设置文件中声明文件打开本事。此中uris字段表示接收URI的范例,此中scheme固定为file。type字段表示支持打开的文件范例(请参见MIME定义),如下举例中范例为txt文件。
  1. {
  2. "module": {
  3.     // ...
  4.     "abilities": [
  5.     {
  6.         // ...
  7.         "skills": [
  8.         {
  9.             "actions": [
  10.             "ohos.want.action.viewData" // 必填,声明数据处理能力
  11.             ],
  12.             "uris": [
  13.             {
  14.                 // 允许打开uri中以file://协议开头标识的本地文件
  15.                 "scheme": "file", // 必填,声明协议类型为文件
  16.                 "type": "text/plain", // 必填,表示支持打开的文件类型
  17.                 "linkFeature": "FileOpen" // 必填,表示此URI的功能为文件打开
  18.             }
  19.             // ...
  20.             ]
  21.             // ...
  22.         }
  23.         ]
  24.     }
  25.     ]
  26. }
  27. }
复制代码

  • 应用处理待打开文件。
声明白文件打开的应用在被拉起后,获取传入的Want参数信息,从中获取待打开文件的URI,在打开文件并获取对应的file对象后,可对文件举行读写操作。
  1. // xxx.ets
  2. import fs from '@ohos.file.fs';
  3. import { Want } from '@kit.AbilityKit';
  4. import { BusinessError } from '@kit.BasicServiceKit';
  5. export default class EntryAbility extends UIAbility {
  6.     onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
  7.         // 从want信息中获取uri字段
  8.         let uri = want.uri;
  9.         if (uri == null || uri == undefined) {
  10.             console.info('uri is invalid');
  11.             return;
  12.         }
  13.         try {
  14.             // 根据待打开文件的URI进行相应操作。例如同步读写的方式打开URI获取file对象
  15.             let file = fs.openSync(uri, fs.OpenMode.READ_WRITE);
  16.             console.info('Succeed to open file.');
  17.         } catch (err) {
  18.             let error: BusinessError = err as BusinessError;
  19.             console.error(`Failed to open file openSync, code: ${error.code}, message: ${error.message}`);
  20.         }
  21.     }
  22. }
复制代码
鸿蒙全栈开发全新学习指南

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

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


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


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


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


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


写在末了



  • 如果你觉得这篇内容对你还蛮有资助,我想邀请你帮我三个小忙:
  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
  • 关注小编,同时可以期待后续文章ing

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

悠扬随风

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表