Android 中的范围存储
使用文件系统是创建 Android 应用程序的基本要素。在 Android 10 之前,如果您授予应用存储权限,则应用可以访问设备上的任何文件。然而,大多数程序不需要访问整个存储系统。他们通常处理单个文件或一小部分文件。这对用户隐私构成了风险。谷歌在 Android 10 中引入了范围存储的概念,它改善了用户控制和隐私,同时减少了卸载应用程序留下的文件混乱。
此存储分区称为范围存储。计划是将总存储空间分成多个部分。将授予包含应用程序所需信息的存储块应用程序的访问权限。此外,系统将存储与所有者的应用程序相关联,允许系统轻松定位与应用程序匹配的数据。如果用户不希望卸载应用程序,这也将有助于删除应用程序特定的数据。 Android 11(API 级别 30)通过提高存储在外部存储上的应用和用户数据的安全性来改进平台。此版本包括许多改进,包括原始文件路径访问、批量媒体编辑操作以及存储访问框架的改进 UI。
以前的存储有什么问题?
受限访问:大多数应用程序不需要完全存储访问权限,因为它们的用例仅限于它们控制的特定类别的数据或资产。超市应用程序或电子商务应用程序需要存储访问权限只是为了要求用户提交他们的个人资料图像就是这种用例的一个示例。存储访问允许应用程序查看与您的银行对帐单或个人数据一样敏感的文档。你对这件事有什么感想?
数据组织:链接到应用程序的数据/文件分散在共享存储中。如果您需要删除程序并清除所有相关数据,这将是困难的。
个人存储
此存储仍与以前相同。它是应用程序自己的私有目录(/app/data/Package Name>),应用程序对其具有不受限制的读写访问权限。
共享的存储
这进一步细分为媒体和下载集合。图像、音频和视频文件存储在媒体集合中。非媒体文件将通过下载收集处理。
Geek Tip: Please keep in mind that media location is now considered sensitive data and will not be exposed unless the app has ACCESS MEDIA LOCATION permission. It is not a run-time authorization and must be included in the manifest. However, if the app is heavily reliant on metadata or if it is an enterprise application where the permission can be removed, it is a good idea to double-check this. If you require the exact bytes of saved media, use ‘MediaStore.setRequireOriginal(photoUri).’
应用程序现在可以访问特定的内存块。
如果您的 Android 应用程序是备份应用程序,并且需要访问所有数据怎么办?
Android 10 上的用户尝试使用存储访问机制访问目录。这不是存储访问框架的意图。此外,用户对 UX 表示不满。在 Android 11 中,为此类应用添加了新权限。应用必须向 Google Play 提交声明表才能请求授权。一旦用户授权广泛访问,用户将获得包含非媒体文件的未经过滤的 MediaStore 视图。但是,您的应用程序将无法访问外部应用程序目录。
Scoped Storage 向 Android 开放的 Great Avenues
- 只要项目保存在有组织的集合中,应用程序就可以完全访问贡献文件(媒体和非媒体)。
- 该应用程序将可以不受限制地访问内部和外部存储以进行读写操作。
- 使用“ READ STORAGE PERMISSION ”权限,您可以访问其他应用程序提供的媒体收藏。 ' WRITE STORAGE PERMISSION ' 权限将在未来版本中被弃用,如果使用,其函数将类似于 ' READ STORAGE PERMISSION ' 权限。
- 存储访问框架 API 可用于访问其他应用程序提供的非媒体资产。不需要明确授权。
Android 是如何促成这一巨大变化的?
- 范围存储是 Android 10 和 11 中的默认行为。但是,在 Android 10 中,应用可以请求旧的外部存储,而在 11 中并非如此。此外,在 Android 10 中,需要更大访问权限的应用会尝试使用存储访问框架来选择目录,这不是存储框架的最初目的。 Android 11 中引入了特殊访问权限。一旦应用在 Google Play 上被列入白名单,就可以要求用户获得特殊权限。
- Android 11 中的媒体商店已升级。用户可以批量删除/编辑媒体文件,这在 Android 10 中是不可能的。此外,复制和编辑文件在 11 中可用,但仅建议一次性修改和小文件,因为传输文件会阻塞用户的硬盘贮存。
- Android 10 不允许原生库或文件路径。这是 C 和 C++ 应用程序的用例。此功能在 Android 11 中实现,它是开发人员需要创建新代码的唯一用例。在底层,文件路径 API 充当媒体存储 API 的代理。因此,只要可行,就直接使用媒体存储 API。
- Android 10 中范围存储权限的 UI 看起来与之前的 Android 版本相同。因此,用户很难确定他们是授予对范围存储还是整个存储的访问权限。
结论
如果您的应用在共享存储或应用目录之外有文件,如果您打算面向 Android 10 或更高版本,则必须将它们重新定位到应用目录。从 Android 10 开始,您将无法访问它。范围存储已经到来,以解决长期存在的隐私问题。尽管有许多有争议的决定和不好的评论,但 Android 10 仍然存在。从 2020 年 9 月开始,应用必须面向 Android 10 或更高版本,因此除非您是不使用存储的应用,否则建议您开始使用范围存储。