.setDestinationInExternalPublicDir(Environment.DIRECTORY_PICTURES, File.separator + filename)
Marshmallow要求WRITE_EXTERNAL_STORAGE权限(如预期所示),但在Android Q及更高版本中,即使没有该权限,它也可以正常工作。为什么会这样呢?是因为有了范围存储吗?
.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)及更高版本的应用程序默认具有被限定访问外部存储,或称作限定存储。这样的应用程序仅可以访问外部存储上应用程序特定的文件夹以及应用程序创建的特定类型媒体文件。