HarmonyOS Next基于 File Access Framework 的用户文件访问与权限控制
SameX
Posted on November 4, 2024
本文旨在深入探讨华为鸿蒙HarmonyOS Next系统(截止目前API12)的文件管理技术细节,基于实际开发实践进行总结。
主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。
本文为原创内容,任何形式的转载必须注明出处及原作者。
引言
用户文件访问是移动应用开发中的一项重要功能,HarmonyOS Next 的 File Access Framework 为开发者提供了便捷、安全的方式来实现用户文件访问和管理。本文将深入探讨 File Access Framework 的架构、功能、权限控制以及使用方法,并通过示例代码展示如何实现文件选择、保存和文件管理操作。
1. File Access Framework 简介
File Access Framework 是 HarmonyOS Next 提供的一套用户文件访问和管理框架,它基于 ExtensionAbility 组件机制,为开发者提供统一的接口和方法,方便开发者访问和管理用户文件。File Access Framework 具有以下特点:
- 安全性: 通过权限控制机制,确保应用只能访问授权的文件,保护用户数据安全。
- 便捷性: 提供统一的接口和方法,简化用户文件访问流程,提高开发效率。
- 跨设备: 支持跨设备访问用户文件,方便用户在不同设备间共享文件。
2. 文件选择与保存权限管理
为了保护用户数据安全,应用在访问用户文件之前,需要获得用户的授权。开发者需要在应用的配置文件
module.json5
中声明所需的文件选择和保存权限,例如:
"abilities": [
{
"name": "EntryAbility",
"skills": [
{
"actions": [
"ohos.arkui.intent.action.CHOOSE"
],
"uris": [
{
"scheme": "file",
"host": "*",
"path": "/storage/*"
}
]
},
{
"actions": [
"ohos.arkui.intent.action.SAVE"
],
"uris": [
{
"scheme": "file",
"host": "*",
"path": "/storage/*"
}
]
}
]
}
]
3. 用户文件访问接口说明
File Access Framework 提供了以下接口供开发者使用:
- FileAccessHelper: 提供文件访问和管理的 API 接口,例如获取文件路径、获取文件属性、创建目录、删除文件等。
- FileAccessExtensionAbility: 提供 File Access Framework 能力,包括 UserFileManager 和 ExternalFileManager,用于管理内卡和外置存储设备上的文件。 4. 示例代码:选择与保存文件的操作 以下示例代码展示了如何使用 File Access Framework 选择图片、保存文档以及进行文件管理操作: 选择图片
import { fileAccess } from '@ohos.fileAccess';
import { Want } from '@ohos.arkui.ability';
export default class EntryAbility extends Ability {
onWindowStageCreate(windowStage: WindowStage) {
const.wantAgent = wantAgent.createWantAgent();
const chooseIntent = {
action: 'ohos.arkui.intent.action.CHOOSE',
entities: ['image/*'],
type: 'image/*'
};
const chooseWant = wantAgent.createWant(chooseIntent);
this.context.startAbility(chooseWant, (result) => {
if (result) {
const uri = chooseWant.response.result;
// 获取图片属性
fileAccess.getFileInfo(uri, (error, fileInfo) => {
if (error) {
console.error('Failed to get file info:', error);
} else {
console.log('File info:', fileInfo);
}
});
} else {
console.log('Failed to choose image');
}
});
}
}
保存文档
import { fileAccess } from '@ohos.fileAccess';
import { Want } from '@ohos.arkui.ability';
export default class EntryAbility extends Ability {
onWindowStageCreate(windowStage: WindowStage) {
const.wantAgent = wantAgent.createWantAgent();
const saveIntent = {
action: 'ohos.arkui.intent.action.SAVE',
type: 'text/plain'
};
const saveWant = wantAgent.createWant(saveIntent);
this.context.startAbility(saveWant, (result) => {
if (result) {
const uri = saveWant.response.result;
// 保存文档内容
fileAccess.saveFile(uri, 'Hello, World!', (error) => {
if (error) {
console.error('Failed to save file:', error);
} else {
console.log('File saved successfully');
}
});
} else {
console.log('Failed to save document');
}
});
}
}
文件管理
import { fileAccess } from '@ohos.fileAccess';
export default class EntryAbility extends Ability {
onWindowStageCreate(windowStage: WindowStage) {
const filesDir = this.context.filesDir;
// 创建目录
fileAccess.createDir(filesDir + '/newDir', (error) => {
if (error) {
console.error('Failed to create directory:', error);
} else {
console.log('Directory created successfully');
}
});
// 删除文件
fileAccess.deleteFile(filesDir + '/test.txt', (error) => {
if (error) {
console.error('Failed to delete file:', error);
} else {
console.log('File deleted successfully');
}
});
}
}
5. File Access Framework 优势
File Access Framework 的优势主要体现在以下几个方面:
- 简化开发流程: 提供统一的接口和方法,简化用户文件访问流程,提高开发效率。
- 提高用户体验: 通过权限控制机制,确保应用只能访问授权的文件,保护用户数据安全,提高用户体验。
- 增强应用功能: 支持跨设备访问用户文件,方便用户在不同设备间共享文件,增强应用功能。 总结 File Access Framework 为我们开发者提供了便捷、安全的方式来实现用户文件访问和管理。开发者可以利用 File Access Framework 的优势,轻松实现文件选择、保存、管理和跨设备访问等功能,为用户提供更优质的体验。
Posted on November 4, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
November 29, 2024
November 29, 2024
November 29, 2024
November 29, 2024