AndroidQStorage
Android Q storage Actual combat(MediaStore and SAF)
Install / Use
/learn @zengcanxiang/AndroidQStorageREADME
AndroidQStorageSample
是什么?
本项目是,在当前Android Q即将大规模普及的情况下,适配Android Q对存储权限做出的调整,而进行的一个实战项目。
项目中对文件的操作全部基于Uri对象和AndroidX的DocumentFile库,为大家演示Android Q通过Storage Access Framework如何操作私有目录和公共目录。
主要功能包括,
- 对Android Q 存储权限的获取
- 校验一个Uri是否有效
- 如何保存、获取MediaStore内容
- 如何通过SAF获取文件/文件夹的Uri
- 如何通过SAF传入Uri对文件进行操作
为什么?
作为Android的开发者,大家应该对早年Android手机被人抱怨卡顿、手机存储空间被应用占用、文件被毒瘤应用监听篡改等诸多问题。很多Android开发者自己都不愿意使用Android手机(尊重个人爱好)。
现在生态在一步一步的变好,Google对文件管理方面一步一步的收紧权限,对用户来说,无疑是一个好消息。
不过,开发者就需要辛苦跟进步伐。但是,换个角度想,如果Android生态因此受益,作为Android开发者,是不是减少“原生开发没人要了”的疑惑呢?
这个项目,是在升级兼容下,把一个比较通用,常用的操作,给大家演示出来,希望能帮到大家减少升级兼容的工作量。
怎么做?
除了对文件的操作,通过导入了androidx的DocumentFile库,传入uri来进行,快捷操作,其他的都是依赖于Android SDK内自带的API。
如果不访问公共目录(非MediaStore),只需要关注PublicDirActivity页面。
操作公共目录的代码,主要在SAFOperateActivity页面。
下面是演示APP操作的GIF,希望能帮到大家。
校验Uri和保存到MediaStore:

读取MediaStore:

通过SAF创建文件:

通过SAF删除文件(演示中,为了明显,通过SAF选择文件后在删除,实际操作中,可以传入自己查询到的Uri):

通过SAF查找文件或者文件夹Uri:

Related Skills
node-connect
339.1kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
83.8kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
339.1kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
83.8kCommit, push, and open a PR
