前进之路 发表于 2024-7-31 10:48:10

HarmonyOS Next开辟学习手册——选择用户文件

用户须要分享文件、生存图片、视频等用户文件时,开辟者可以通过系统预置的 文件选择器(FilePicker) ,实现该能力。通过Picker访问相关文件,将拉起对应的应用,引导用户完成界面操作,接口自己无需申请权限。picker获取的uri只具有临时权限,获取持久化权限须要通过 FilePicker设置永世授权 方式获取。
根据用户文件的常见类型,选择器(FilePicker)分别提供以下选项:


[*] PhotoViewPicker :适用于图片或视频类型文件的选择与生存(该接口在后续版本不再演进)。请利用 PhotoAccessHelper的PhotoViewPicker 来选择图片文件。请利用 安全控件创建媒体资源 。
[*] DocumentViewPicker :适用于文件类型文件的选择与生存。DocumentViewPicker对接的选择资源来自于FilePicker, 负责文件类型的资源管理,文件类型不区分后缀,好比欣赏器下载的图片、文档等,都属于文件类型。
[*] AudioViewPicke :适用于音频类型文件的选择与生存。AudioViewPicker目前对接的选择资源来自于FilePicker。
选择图片或视频类文件

PhotoViewPicker 在后续版本不再演进,请利用 PhotoAccessHelper的PhotoViewPicker 来选择图片文件。
选择文档类文件


[*]导入选择器模块和基础文件API模块。
import{ picker } from '@kit.CoreFileKit';
import { fileIo as fs } from '@kit.CoreFileKit';
import { common } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';

[*]创建文件类型、文件选择选项实例。
const documentSelectOptions = new picker.DocumentSelectOptions();
// 选择文档的最大数目(可选)
documentSelectOptions.maxSelectNumber = 5;
// 指定选择的文件或者目录路径(可选)
documentSelectOptions.defaultFilePathUri = "file://docs/storage/Users/currentUser/test";
// 选择文件的后缀类型,若选择项存在多个后缀名,则每一个后缀名之间用英文逗号进行分隔(可选),后缀类型名不能超过100
documentSelectOptions.fileSuffixFilters = ['.png', '.txt', '.mp4'];
//选择是否对指定文件或目录授权,true为授权,当为true时,defaultFilePathUri为必选参数,拉起文管授权界面;false为非授权,拉起常规文管界面(可选)
documentSelectOptions.authMode = true;

[*]创建 文件选择器DocumentViewPicker 实例。调用 select() 接口拉起FilePicker应用界面进行文件选择。
let uris: Array<string> = [];
let context = getContext(this) as common.Context; // 请确保 getContext(this) 返回结果为 UIAbilityContext
// 创建文件选择器实例
const documentViewPicker = new picker.DocumentViewPicker(context);
documentViewPicker.select(documentSelectOptions).then((documentSelectResult: Array<string>) => {
//文件选择成功后,返回被选中文档的uri结果集。
uris = documentSelectResult;
console.info('documentViewPicker.select to file succeed and uris are:' + uris);
}).catch((err: BusinessError) => {
console.error(`Invoke documentViewPicker.select failed, code is ${err.code}, message is ${err.message}`);
})
   留意:
1、利用picker获取的 select() 返回的uri权限是临时只读权限,待退出应用后台后,获取的临时权限就会失效。
2、如果想要获取持久化权限(仅在2in1装备上生效),请参考 文件持久化授权访问 。
3、开辟者可以根据效果集中uri做进一步的处理。发起界说一个全局变量生存uri。
4、如有获取元数据需求,可以通过 基础文件API 和 文件URI 根据uri获取部分文件属性信息,好比文件巨细、访问时间、修改时间、文件名、文件路径等。

[*]待界面从FilePicker返回后,利用 基础文件API的fs.openSync 接口通过uri打开这个文件得到文件描述符(fd)。
let uri: string = '';
//这里需要注意接口权限参数是fs.OpenMode.READ_ONLY。
let file = fs.openSync(uri, fs.OpenMode.READ_ONLY);
console.info('file fd: ' + file.fd);

[*]通过fd利用 fs.readSync 接口读取这个文件内的数据。
let buffer = new ArrayBuffer(4096);
let readLen = fs.readSync(file.fd, buffer);
console.info('readSync data to file succeed and buffer size is:' + readLen);
//读取完成后关闭fd。
fs.closeSync(file);
选择音频类文件


[*]导入选择器模块和基础文件API模块。
import{ picker } from '@kit.CoreFileKit';
import { fileIo as fs } from '@kit.CoreFileKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { common } from '@kit.AbilityKit';

[*]创建音频类型文件选择选项实例。
   阐明:
目前AudioSelectOptions不支持参数配置,默认可以选择全部类型的用户文件。
const audioSelectOptions = new picker.AudioSelectOptions();

[*]创建 音频选择器AudioViewPicker 实例。调用 select() 接口拉起FilePicker应用界面进行文件选择。
let uri: string = '';
// 请确保 getContext(this) 返回结果为 UIAbilityContext
let context = getContext(this) as common.Context;
const audioViewPicker = new picker.AudioViewPicker(context);
audioViewPicker.select(audioSelectOptions).then((audioSelectResult: Array<string>) => {
//文件选择成功后,返回被选中音频的uri结果集。
uri = audioSelectResult;
console.info('audioViewPicker.select to file succeed and uri is:' + uri);
}).catch((err: BusinessError) => {
console.error(`Invoke audioViewPicker.select failed, code is ${err.code}, message is ${err.message}`);
})
   留意
1、利用picker获取的 select() 返回的uri权限是临时只读权限,待退出应用后台后,获取的临时权限就会失效。
2、如果想要获取持久化权限(仅在2in1装备上生效),请参考 文件持久化授权访问 。
3、开辟者可以根据效果集中的uri做读取文件数据操作。发起界说一个全局变量生存uri。例如通过 基础文件API 根据uri拿到音频资源的文件描述符(fd),再共同媒体服务实现音频播放的开辟,具体请参考 音频播放开辟引导 。

[*]待界面从FilePicker返回后,可以利用 基础文件API的fs.openSync 接口通过uri打开这个文件得到文件描述符(fd)。
let uri: string = '';
//这里需要注意接口权限参数是fs.OpenMode.READ_ONLY。
let file = fs.openSync(uri, fs.OpenMode.READ_ONLY);
console.info('file fd: ' + file.fd);

[*]通过fd可以利用 基础文件API的fs.readSync 接口读取这个文件内的数据。
let buffer = new ArrayBuffer(4096);
let readLen = fs.readSync(file.fd, buffer);
console.info('readSync data to file succeed and buffer size is:' + readLen);
//读取完成后关闭fd。
fs.closeSync(file);
鸿蒙全栈开辟全新学习指南

有很多小伙伴不知道学习哪些鸿蒙开辟技能?不知道须要重点把握哪些鸿蒙应用开辟知识点?而且学习时频仍踩坑,最终浪费大量时间。所以要有一份实用的鸿蒙(HarmonyOS NEXT)学习路线与学习文档用来跟着学习是非常有须要的。
针对一些列因素,整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开辟技能的学习路线,包含了鸿蒙开辟必把握的焦点知识要点,内容有(ArkTS、ArkUI开辟组件、Stage模型、多端部署、分布式应用开辟、WebGL、元服务、OpenHarmony多媒体技能、Napi组件、OpenHarmony内核、OpenHarmony驱动开辟、系统定制移植等等)鸿蒙(HarmonyOS NEXT)技能知识点。
本路线共分为四个阶段:

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

https://img-blog.csdnimg.cn/direct/50513a90f3bf4d169cc892232794263c.png#pic_center
第二阶段:鸿蒙南北双向高工技能基础:gitee.com/MNxiaona/733GH

https://img-blog.csdnimg.cn/direct/350e757aac894a3cb655cf334e1df47b.png
第三阶段:应用开辟中高级就业技能

https://img-blog.csdnimg.cn/direct/55709e9664824aebb329325124ad7dd2.png
第四阶段:全网首发-工业级南向装备开辟就业技能:gitee.com/MNxiaona/733GH

https://img-blog.csdnimg.cn/direct/9655f4c1cf1249559ba98372e17c6a17.png
《鸿蒙 (Harmony OS)开辟学习手册》(共计892页)

怎样快速入门?

1.根本概念
2.构建第一个ArkTS应用
3.……
https://img-blog.csdnimg.cn/direct/41127b7024bf4c2aacf98f6e5d8aaf4e.png
开辟基础知识:gitee.com/MNxiaona/733GH

1.应用基础知识
2.配置文件
3.应用数据管理
4.应用安全管理
5.应用隐私保护
6.三方应用调用管控机制
7.资源分类与访问
8.学习ArkTS语言
9.……
https://img-blog.csdnimg.cn/direct/47ff5221520f4fd29b4b344040b6c910.png
基于ArkTS 开辟

1.Ability开辟
2.UI开辟
3.公共变乱与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.装备管理
12.装备利用信息统计
13.DFX
14.国际化开辟
15.折叠屏系列
16.……
https://img-blog.csdnimg.cn/direct/dde1b78b86224ce5ae8dbc84fea54eba.png
鸿蒙开辟面试真题(含参考答案):gitee.com/MNxiaona/733GH

https://img-blog.csdnimg.cn/direct/6ecd0695d29b44b3acd452cb350131f1.png
鸿蒙入门讲授视频:

https://img-blog.csdnimg.cn/direct/6c4a4627851541cabe0f7614bcb2c0e8.png
美团APP实战开辟讲授:gitee.com/MNxiaona/733GH

https://img-blog.csdnimg.cn/direct/84ad2d4eaec84d16acfeab591834605d.png
写在最后



[*]如果你觉得这篇内容对你还蛮有资助,我想约请你帮我三个小忙:
[*]点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
[*]关注小编,同时可以期待后续文章ing
页: [1]
查看完整版本: HarmonyOS Next开辟学习手册——选择用户文件