Android 11进一步增强了平台,为外部存储上的应用程序和用户数据提供了更好的保护。作为这项工作的一部分,该平台引入了进一步的改进,以简化向范围存储的过渡。 该预览版引入了我们去年在Android Dev Summit上提出的一些增强功能,例如,对介质的选择加入原始文件路径访问,对介质的批处理编辑操作以及对Storage Access Framework的更新的UI。 在即将发布的Developer Preview中,寻找文件访问的其他增强功能以及有关文件管理和照片画廊的更新策略。与往常一样,我们邀请您提供反馈意见,以帮助打造新的Android版本。使用问题追踪器向我们发送您的评论。
Scoped storage enforcement
为了给开发人员更多的测试时间,面向Android 10(API级别29)或更低版本的应用仍可以请求requestLegacyExternalStorage属性。此标志允许应用程序暂时退出与范围存储相关的更改,例如授予对不同目录和不同类型媒体文件的访问权限。 但是,当您将应用更新为Android 11时,将无法使用requestLegacyExternalStorage,并且没有其他可用选项提供退出功能。
Media file access
为了在保留用户隐私的同时更轻松地访问媒体,Android 11添加了以下功能。
Perform batch operations
为了使设备之间保持一致并增加用户的便利性,Android 11向MediaStore API添加了几种方法。这些方法对于希望简化流程以修改特定媒体文件(例如就地编辑照片)的应用程序特别有用。
添加的方法如下:
createWriteRequest():
要求用户授予您的应用对指定媒体文件组的写访问权限。
createFavoriteRequest():
请求用户在设备上将指定的媒体文件标记为他们的某些“收藏夹”媒体。对此文件具有读取访问权限的任何应用程序都可以看到用户已将该文件标记为“收藏夹”。
createTrashRequest():
要求用户将指定的媒体文件放入设备的垃圾箱。在特定时间段后,垃圾桶中的项目将被永久删除;默认值为7天。
createDeleteRequest():
要求用户立即将指定的媒体文件永久删除,而无需事先将其放入垃圾箱。
在调用这些方法中的任何一个之后,系统将合并一个PendingIntent对象。您的应用程序调用此后后,用户会见一个链接,要求您同意您的应用程序更新或删除指定的媒体文件。
Access files using raw paths
要激活此功能进行测试,请执行以下操作:
1.打开系统设置。
2.导航到系统>开发人员选项>功能标志。
3.找到settings_fuse并将其打开。现在settings_fuse下的描述应该为true。
4.重新启动设备。
File and directory access restrictions
为了使开发人员有时间进行测试,与存储访问框架(SAF)相关的以下更改仅在您的应用面向Android 11时才生效。
访问目录
您不能再使用ACTION_OPEN_DOCUMENT_TREE意向操作来请求访问以下目录:
1.根下载目录。
2.设备制造商认为可靠的每个SD卡卷的根目录,无论该卡是仿真卡还是可移动卡。
测试变更
要测试此行为更改,请在应用的清单文件中将requestLegacyExternalStorage的值设置为false。您可以通过执行以下操作来确认行为更改已对您的应用生效:
1.通过ACTION_OPEN_DOCUMENT_TREE动作调用意图。检查“下载目录”是否出现并显示为灰色。
2. 使用ACTION_OPEN_DOCUMENT操作调用意图。检查Android / data /和Android / obb /目录都没有出现
Permissions
Android 11引入了以下与存储权限相关的更改
无论您应用的目标SDK版本是什么,以下更改都将在Android 11中生效:
1.存储运行时权限已重命名为“文件和媒体”。
2.如果您的应用未选择退出范围存储并请求READ_EXTERNAL_STORAGE权限,则用户将看到与Android 10不同的对话框。该对话框表明您的应用正在请求访问照片,视频,音频剪辑和文件。在系统设置的“设置”>“隐私”>“权限管理器”>“文件和媒体”页面上,如果授予了权限,您的应用程序将列在“允许所有文件”下
如果您的应用以Android 11为目标,则WRITE_EXTERNAL_STORAGE权限和WRITE_MEDIA_STORAGE特权都不再提供任何其他访问权限。
All Files Access
有些应用程序具有核心用例,需要广泛的文件访问权限,例如文件管理或备份和还原操作。他们可以通过执行以下操作获得“所有文件访问”权限:
1.声明MANAGE_EXTERNAL_STORAGE权限。
2.将用户定向到系统设置页面,他们可以在其中启用应用程序的“允许访问以管理所有文件”选项。
此权限授予以下权限:
1.对共享存储中的所有文件的读访问权和写访问权。
2.访问MediaStore.Files表的内容。
应用程序可以使用MediaStore API或原始文件路径访问这些文件。如果您的应用程序使用Storage Access Framework,则不能使用它访问“所有文件访问”权限可用的其他文件和目录。
MANAGE_EXTERNAL_STORAGE权限允许应用访问共享存储上的潜在敏感数据。在即将发布的开发人员预览版中,寻找Google Play为需要此权限的应用提供准则。