如何使用Android作用域存储保存绘图应用的专属大文件
MediaStore完全可以实现仅查询自有文件
- Android 10(API 29)及以上系统自带
MediaStore.Images.Media.OWNER_PACKAGE_NAME字段,查询时添加该字段等于你的应用包名的过滤条件,就能直接筛选出仅本应用创建的图片文件,不会返回其他应用的资源。 - 兼容更低版本的话,你插入文件时可以统一指定存储相对路径为
Pictures/[你的应用名称]/,查询时添加MediaStore.Images.Media.RELATIVE_PATH的路径过滤规则即可,一样能实现分区查询。 - 插入文件时的核心逻辑改动很小,只需要把原来直接写外部存储公共目录的逻辑替换成MediaStore插入逻辑,原有文件读写、图库展示的逻辑基本不需要调整,用户感知不到变化。
上述MediaStore方案完美匹配你的三个需求
- 存储在公共媒体目录
Pictures下的文件,用户卸载应用时不会被系统删除,满足不丢作品的要求。 - 用户可以直接在系统文件管理器、系统图库中找到
Pictures/[你的应用名称]目录,自行复制、备份全量作品,无需通过应用内导出。 - 逻辑改动量极小,文件存储路径和原有旧版本的存储逻辑几乎一致,老用户不会有任何使用困惑。
内部存储不是你的最优选择
哪怕你已经完成了内部存储的开发逻辑,也不建议上线:普通用户没有主动导出备份的习惯,一旦卸载应用、或者误清应用数据就会丢失所有作品,后续会产生大量用户投诉,完全得不偿失。
可选补充方案
如果你有部分高级用户需要自定义存储位置,可以新增可选的自定义路径功能:仅调用一次SAF的目录选择Intent让用户授权目标文件夹,拿到持久化URI权限之后,你就可以在该目录下自由读写所有文件,全程不需要再依赖系统选择器,你自己的图库UI逻辑完全可以复用,开发成本很低。
内容的提问来源于stack exchange,提问作者Eric Peterson
相关产品推荐
相关产品推荐

