返回

Android 存储适配:10 与 11 如何优雅切换

Android

前言

在上一篇文章中,我们分析了 Android 存储相关的基础知识,介绍了各个目录下文件的访问方式。在本篇文章中,我们将着重分析 Android 系统版本变更对存储访问权限的影响及其适配方法。

通过本篇文章,你将了解到:

  1. Android 10 与 Android 11 中存储访问权限的变更
  2. 如何适配 Android 10 与 Android 11 的存储访问权限变更
  3. 如何在 Android 10 与 Android 11 中优雅地切换存储访问权限

Android 10 与 Android 11 中存储访问权限的变更

在 Android 10 中,应用程序对外部存储的访问受到了一些限制。具体来说,应用程序只能访问其专有目录下的文件,而无法访问其他应用程序的目录或公共目录。这一变化是为了增强系统的安全性,防止应用程序滥用存储权限。

在 Android 11 中,存储访问权限的限制进一步加强。应用程序不仅无法访问其他应用程序的目录或公共目录,而且还无法访问其专有目录下的某些文件。例如,应用程序无法访问其专有目录下的媒体文件,如图片、视频和音频文件。这一变化是为了进一步增强系统的安全性,防止应用程序窃取用户隐私。

如何适配 Android 10 与 Android 11 的存储访问权限变更

为了适配 Android 10 与 Android 11 的存储访问权限变更,应用程序需要进行以下调整:

  1. 检查目标 Android 版本并调整存储访问代码

在应用程序中,首先需要检查目标 Android 版本,并根据目标 Android 版本来调整存储访问代码。如果目标 Android 版本是 Android 10 或更高版本,则需要使用新的存储访问 API 来访问存储。

  1. 使用新的存储访问 API

Android 10 和 Android 11 提供了新的存储访问 API,用于访问外部存储。这些 API 包括:

  • getExternalFilesDir():获取应用程序专有目录的路径。
  • getExternalMediaDirs():获取应用程序专有媒体目录的路径。
  • createDocument():创建新文件或目录。
  • openDocument():打开现有文件或目录。
  • deleteDocument():删除文件或目录。
  1. 处理存储访问权限变更引起的异常

在 Android 10 和 Android 11 中,应用程序访问存储时可能会遇到一些异常。这些异常包括:

  • SecurityException:应用程序尝试访问其专有目录以外的文件或目录时抛出此异常。
  • FileNotFoundException:应用程序尝试打开不存在的文件时抛出此异常。
  • PermissionDeniedException:应用程序没有访问存储的权限时抛出此异常。

应用程序需要处理这些异常,并向用户提供适当的提示信息。

如何优雅地在 Android 10 与 Android 11 中切换存储访问权限

为了在 Android 10 与 Android 11 中优雅地切换存储访问权限,应用程序可以使用以下技巧:

  1. 使用 ContextCompat.checkSelfPermission() 检查存储访问权限

在应用程序中,可以使用 ContextCompat.checkSelfPermission() 方法来检查应用程序是否具有存储访问权限。如果应用程序没有存储访问权限,则需要向用户申请存储访问权限。

  1. 使用 requestPermissions() 方法向用户申请存储访问权限

在应用程序中,可以使用 requestPermissions() 方法向用户申请存储访问权限。当用户授予应用程序存储访问权限后,应用程序就可以访问外部存储了。

  1. 在不同的 Android 版本中使用不同的存储访问代码

应用程序可以在不同的 Android 版本中使用不同的存储访问代码。例如,在 Android 10 中,应用程序可以使用 getExternalStorageDirectory() 方法来获取外部存储的根目录。而在 Android 11 中,应用程序需要使用 getExternalFilesDir() 方法来获取应用程序专有目录的路径。

通过使用这些技巧,应用程序就可以在 Android 10 与 Android 11 中优雅地切换存储访问权限,确保应用程序在不同版本中都能正常访问存储。