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。借助内容提供器,您可以完全控制向其他应用提供的读取和写入访问权限。尽管您可以将内容提供器与任何存储媒介一起使用,但它们通常与数据库一起使用。