为什么 Android Q 及更高级别不需要 WRITE_EXTERNAL_STORAGE

Why doesn't require WRITE_EXTERNAL_STORAGE on Android Q and higher

我使用 DownloadManager 下载照片并将其保存到外部图片目录:

.setDestinationInExternalPublicDir(Environment.DIRECTORY_PICTURES, File.separator + filename)

Marshmallow 需要 WRITE_EXTERNAL_STORAGE(正如预期的那样),但在 Android Q 及更高版本上它可以在未经许可的情况下正常工作。为什么会这样?是因为分区存储吗?

Android 文件:

Android 定义了以下对外部存储的读写访问权限:READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE.

在 Android 的早期版本中,应用需要声明这些权限才能访问外部存储上应用特定目录之外的任何文件。 Android 的较新版本更多地依赖于文件的用途而不是其位置来确定应用程序访问该文件的能力。这种基于目的的存储模型改善了用户隐私,因为应用程序只能访问它们实际使用的设备文件系统区域。

为了让用户更好地控制他们的文件并限制文件混乱,面向 Android 10(API 级别 29) 及更高级别的应用程序是默认情况下,给予对外部存储或范围存储的范围访问。此类应用只能访问外部存储上特定于应用的目录,以及该应用创建的特定类型的媒体。

For more