Android R 存储机制变更

Android R 对于APP读写存储权限做了更细致限制,之前的 READ_EXTERNAL_STORAGE/WRITE_EXTERNAL_STORAGE 权限可以访问位于外部存储空间中应用专属目录之外的任何文件。现在新增 MANAGE_EXTERNAL_STORAGE 权限,只有申请这个权限后,才能访问管理文件。例如在 sdcard 目录下创建文件夹等。

官方从 10 开始引导使用分区存储,使用 sdcard 下原有目录,应用需要创建新的目录去Android/下自己的应用目录下,按照系统  android.os.Environment 定义类型创建不同类型文件目录

  • 图片(包括照片和屏幕截图),存储在 DCIM/ 和 Pictures/ 目录中。系统将这些文件添加到 MediaStore.Images 表格中。
  • 视频,存储在 DCIM/Movies/ 和 Pictures/ 目录中。系统将这些文件添加到 MediaStore.Video 表格中。
  • 音频文件,存储在 Alarms/Audiobooks/Music/Notifications/Podcasts/ 和 Ringtones/ 目录中,以及位于 Music/ 或 Movies/ 目录中的音频播放列表中。系统将这些文件添加到 MediaStore.Audio 表格中。
  • 下载的文件,存储在 Download/ 目录中。在搭载 Android 10(API 级别 29)及更高版本的设备上,这些文件存储在 MediaStore.Downloads 表格中。此表格在 Android 9(API 级别 28)及更低版本中不可用。

这样目的还是为了用户数据保护。对于应用间文件共享,推荐如下做法

  • 如果您需要与其他应用共享特定文件,请使用 FileProvider API。
  • 如果您需要向其他应用提供数据,可以使用 ContentProvider。借助内容提供器,您可以完全控制向其他应用提供的读取和写入访问权限。尽管您可以将内容提供器与任何存储媒介一起使用,但它们通常与数据库一起使用。

 

上一篇:java – Track.getSimilar:在元素中找到了无效的XML字符(Unicode:0x3)…


下一篇:Android 10文件存储适配