HarmonyOS鸿蒙Next中应用读取sharefile文件共享
HarmonyOS鸿蒙Next中应用读取sharefile文件共享 目前有两个应用A,B
应用B打算写一个共享文件到本地,并记录为只读状态(只有应用B能写)
应用A需要从本地读取共享文件的信息
以上流程是否可以实现,个人了解到好像可以用sharefile实现,但个人对文件读写不够熟悉,相关文档看着有点难懂,希望有伙伴能提供一下思路或者文档查阅。
【背景知识】
系统通过访问控制的机制,来避免数据或功能被不当或恶意使用。当前访问控制的机制涉及多方面,包括应用沙箱、应用权限、系统控件等方案。应用沙箱限定了只有目标受众才能访问应用内的数据。
【解决方案】
因为应用沙箱限制了应用可见的数据范围。在“应用沙箱目录”中,应用仅能看到自己的应用文件以及少量的系统文件(应用运行必需的少量系统文件)。因此,本应用的文件也不为其他应用可见。两个应用之间如果需要文件流转可以通过以下三种方案:
- 应用A将应用内文件以分享的形式发送给应用B:这种方式应用B作为被分享应用需要在module.json5配置文件的actions标签的值配置为"ohos.want.action.sendData",表示接收应用分享文件,配置uris字段,表示接收URI的类型,即只接收其他应用分享该类型的URI,如:
"actions": [
"ohos.want.action.sendData"
],
"uris": [
{
"scheme": "file",
"type": "text/plain"
}
]
参考使用其他应用分享的文件。
-
应用A使用应用B打开指定文件:如,使用其他图片编辑器打开/编辑一张图片可参考拉起图片编辑类应用;由系统从已安装的应用中寻找符合要求的应用,打开特定文件,参考拉起文件处理类应用。
-
在应用A内操作,将应用文件转换为用户文件,应用B再直接访问用户文件;具体操作分两步:
- 应用A将文件转换为用户文件(需要应用A实现,如微信内保存图片,保存文件等操作);
- 应用B访问用户文件,业务代码是一致的,获取用户授权有两种方式:
- 使用系统Picker(推荐);
- 申请受限权限(不推荐),如允许读取用户公共目录的图片或视频文件,允许应用访问并修改用户目录下的文件。
-
【总结】
因为安全访问机制的限制,应用A作为文件最初的拥有者和流出方,必须主动动作,其他应用才可能有权限分享到应用内的文件;应用B作为文件流转的目的地无权通过代码的形式直接访问、管理其他应用内的文件。
更多关于HarmonyOS鸿蒙Next中应用读取sharefile文件共享的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
保存文件并设置权限
使用FilePicker保存文件时,通过wantConstant.Flags.FLAG_AUTH_READABLE设置允许其他应用读取,在module.json5
中声明文件访问权限,A应用通过FilePicker读取
在HarmonyOS Next中,应用通过FileShare Kit访问sharefile文件共享。使用FileShareManager类获取共享文件列表,通过uri读取指定文件内容。需在module.json5中配置相关权限,如ohos.permission.FILE_ACCESS和ohos.permission.MEDIA_LOCATION。通过FileDescriptor打开文件流进行数据读取操作。
在HarmonyOS Next中,可以通过ShareFile机制实现应用A读取应用B共享的只读文件。以下是实现思路:
-
应用B创建共享文件:
- 使用
ohos.file.shareFileManager
模块创建共享文件,通过createShareFile()
生成文件URI - 配置文件权限为只读(其他应用可读,仅应用B可写)
- 将文件保存到应用沙箱并记录URI
- 使用
-
应用A读取文件:
- 通过应用B提供的共享文件URI,使用
open()
接口以只读模式访问 - 调用
read()
读取文件内容,无需写入权限
- 通过应用B提供的共享文件URI,使用
-
关键步骤:
- 应用B需通过
want
或数据管理将文件URI传递给应用A - 使用
ohos.file.fs
进行实际文件操作 - 注意声明
ohos.permission.READ_USER_STORAGE
权限
- 应用B需通过
参考文档重点查看:
- ShareFileManager开发指南
- 文件uri权限管理章节
- 应用间数据共享规范
这种方案能确保文件仅创建者可修改,其他应用只能读取,符合你的需求。