Android|Android 存储路径那点事

在4.4(API19)以前,手机自身带的存储卡就是内部存储,而扩展的SD卡就是外部存储。但是从4.4的系统开始,手机将机身存储(手机自身带的存储叫做机身存储)在概念上分成了”内部存储internal” 和”外部存储external” 两部分。
分类 Android|Android 存储路径那点事
文章图片
1555056697633-bed0858d-7d47-47b9-8f3d-eca769816843.png
Android|Android 存储路径那点事
文章图片
1555061934230-56a8103a-e4d6-4c1f-a400-93fe9d226097.png
(图源水印)
私有目录: 路径包含包名,应用卸载后会被清空。
示例
Android|Android 存储路径那点事
文章图片
1555056040444-2c518ebc-4035-45bd-a6e9-229e1af33726.png
(图源: https://www.liaohuqiu.net/cn/posts/storage-in-android/)
?
Android Q 变更
【Android|Android 存储路径那点事】摘自华为《安卓Q版本兼容性适配指导v2.3》文档
Android|Android 存储路径那点事
文章图片
1555060094784-79affb63-8402-4eec-a744-4c9a73374c31.png ?
  • Android Q为每个应用程序在外 部存储设备提供了一个独立的存储沙箱,应用通过路径创建的文件都保存在应用的沙箱目录
  • 共享集合:如果应用的一些文件是用户选择下载保存的,应用卸载的时候用户不希望删除,这部分文件开发者可以通过MediaProvider 接口保存在公共共享集合,包括: 照片、视频、音乐和下载集合
  • 新的访问多媒体文件的权限:应用读写自己创建的文件不需要权限 ,但是如果需要读取其他应用创建的多媒体文件就需要申请对应的权限,通过MediaProvider接口读取
  • 读写其他应用的下载公共集合文件需要使用SAF的方式读写
  • 不要通过路径进行文件操作
    • Q版本无法通过路径读写应用沙箱外的所有文件,需要读写沙箱外的多媒体文件,需要使用MediaProvider接口
    • Q版本通过MediaProvider查询图片的“_data”字段值只有图片是应用沙箱内的图片,返回的才是文件的真实路径,其他图片返回的是非文件真实路径,通过该路径判断文件是否存在会出现问题
  • 适配指导:https://developer.android.google.cn/preview/privacy/scoped-storage

    推荐阅读