提供给应用的文件授权访问场景主要分为:
- 获取并使用公共目录。
- 通过FilePicker选择文件或目录授权并支持授权持久化。
- 通过接口获取文件或文件夹当前所在路径的URI。
- 通过接口获取外卡目录。
文件授权访问的场景仅支持部分设备。
下面介绍几种常用操作示例。
获取并使用公共目录
通过目录环境能力获取公共目录,通过弹窗授权方式向用户申请授予对应目录的权限后对相应目录进行访问,具体请参考( 获取并使用公共目录 )。
通过FilePicker设置永久授权
通过FilePicker选择文件或文件夹后设置永久授权,以及应用重启后的激活权限过程如下所示,通过文件分享接口( ohos.fileshare )实现文件授权能力。
- 应用调用picker的( selec )接口,通过FilePicker选择和保存路径URI,此时应用获得该路径的临时访问权限。
以下示例代码演示了获取文件夹URI的过程:
import { BusinessError } from '@kit.BasicServicesKit';
import { picker } from '@kit.CoreFileKit';
async function selectExample() {
try {
let DocumentSelectOptions = new picker.DocumentSelectOptions();
DocumentSelectOptions.selectMode = picker.DocumentSelectMode.FOLDER;
let documentPicker = new picker.DocumentViewPicker();
let uris = await documentPicker.select(DocumentSelectOptions);
} catch (error) {
let err: BusinessError = error as BusinessError;
console.error('select failed with err: ' + JSON.stringify(err));
}
}
- 应用按需对路径设置持久化授权,检查是否对URI有持久化权限,如果没有权限则进行第3步持久化权限,参数uri为第1步FilePicker应用获取的选择路径。
以下示例代码演示了检查持久化权限过程:
import { BusinessError } from '@kit.BasicServicesKit';
import { picker } from '@kit.CoreFileKit';
import { fileShare } from '@kit.CoreFileKit';
async function checkPersistentPermissionExample() {
try {
let documentSelectOptions = new picker.DocumentSelectOptions();
let documentPicker = new picker.DocumentViewPicker();
let uris = await documentPicker.select(documentSelectOptions);
let policyInfo: fileShare.PolicyInfo = {
uri: uris[0],
operationMode: fileShare.OperationMode.READ_MODE,
};
let policies: Array<fileShare.PolicyInfo> = [policyInfo];
fileShare.checkPersistentPermission(policies).then(async (data) => {
let results: Array<boolean> = data;
for (let i = 0; i < results.length; i++) {
console.log("checkPersistentPermission result: " + JSON.stringify(results[i]));
if (!results[i]) {
let info: fileShare.PolicyInfo = {
uri: policies[i].uri,
operationMode: policies[i].operationMode,
};
let policy: Array<fileShare.PolicyInfo> = [info];
await fileShare.persistPermission(policy);
}
}
}).catch((err: BusinessError<Array<fileShare.PolicyErrorResult>>) => {
console.info("checkPersistentPermission failed with error message: " +