Android 存储适配:10 与 11 如何优雅切换
2024-01-10 03:40:37
前言
在上一篇文章中,我们分析了 Android 存储相关的基础知识,介绍了各个目录下文件的访问方式。在本篇文章中,我们将着重分析 Android 系统版本变更对存储访问权限的影响及其适配方法。
通过本篇文章,你将了解到:
- Android 10 与 Android 11 中存储访问权限的变更
- 如何适配 Android 10 与 Android 11 的存储访问权限变更
- 如何在 Android 10 与 Android 11 中优雅地切换存储访问权限
Android 10 与 Android 11 中存储访问权限的变更
在 Android 10 中,应用程序对外部存储的访问受到了一些限制。具体来说,应用程序只能访问其专有目录下的文件,而无法访问其他应用程序的目录或公共目录。这一变化是为了增强系统的安全性,防止应用程序滥用存储权限。
在 Android 11 中,存储访问权限的限制进一步加强。应用程序不仅无法访问其他应用程序的目录或公共目录,而且还无法访问其专有目录下的某些文件。例如,应用程序无法访问其专有目录下的媒体文件,如图片、视频和音频文件。这一变化是为了进一步增强系统的安全性,防止应用程序窃取用户隐私。
如何适配 Android 10 与 Android 11 的存储访问权限变更
为了适配 Android 10 与 Android 11 的存储访问权限变更,应用程序需要进行以下调整:
- 检查目标 Android 版本并调整存储访问代码
在应用程序中,首先需要检查目标 Android 版本,并根据目标 Android 版本来调整存储访问代码。如果目标 Android 版本是 Android 10 或更高版本,则需要使用新的存储访问 API 来访问存储。
- 使用新的存储访问 API
Android 10 和 Android 11 提供了新的存储访问 API,用于访问外部存储。这些 API 包括:
getExternalFilesDir()
:获取应用程序专有目录的路径。getExternalMediaDirs()
:获取应用程序专有媒体目录的路径。createDocument()
:创建新文件或目录。openDocument()
:打开现有文件或目录。deleteDocument()
:删除文件或目录。
- 处理存储访问权限变更引起的异常
在 Android 10 和 Android 11 中,应用程序访问存储时可能会遇到一些异常。这些异常包括:
SecurityException
:应用程序尝试访问其专有目录以外的文件或目录时抛出此异常。FileNotFoundException
:应用程序尝试打开不存在的文件时抛出此异常。PermissionDeniedException
:应用程序没有访问存储的权限时抛出此异常。
应用程序需要处理这些异常,并向用户提供适当的提示信息。
如何优雅地在 Android 10 与 Android 11 中切换存储访问权限
为了在 Android 10 与 Android 11 中优雅地切换存储访问权限,应用程序可以使用以下技巧:
- 使用
ContextCompat.checkSelfPermission()
检查存储访问权限
在应用程序中,可以使用 ContextCompat.checkSelfPermission()
方法来检查应用程序是否具有存储访问权限。如果应用程序没有存储访问权限,则需要向用户申请存储访问权限。
- 使用
requestPermissions()
方法向用户申请存储访问权限
在应用程序中,可以使用 requestPermissions()
方法向用户申请存储访问权限。当用户授予应用程序存储访问权限后,应用程序就可以访问外部存储了。
- 在不同的 Android 版本中使用不同的存储访问代码
应用程序可以在不同的 Android 版本中使用不同的存储访问代码。例如,在 Android 10 中,应用程序可以使用 getExternalStorageDirectory()
方法来获取外部存储的根目录。而在 Android 11 中,应用程序需要使用 getExternalFilesDir()
方法来获取应用程序专有目录的路径。
通过使用这些技巧,应用程序就可以在 Android 10 与 Android 11 中优雅地切换存储访问权限,确保应用程序在不同版本中都能正常访问存储。