返回

Android Q适配指南:存储篇—应对权限管理变化

Android

Android Q (10) 推出的全新权限管理机制,对应用的存储访问方式产生了重大影响。本文将重点介绍 Android Q 的存储权限变化及其对应用的影响,并提供相应的适配建议,帮助您轻松实现存储、微信、qq分享等操作。

Android Q存储权限变化

在 Android Q 之前,绝大部分的应用只需动态申请 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE 权限即可在 SD 卡上创建属于自己的专属文件夹,进行数据读写操作。这一做法简单直接,但也存在一定的安全风险。

例如,恶意应用可能利用此权限访问并窃取用户隐私数据。为了提升用户数据安全性,Android Q 对存储权限进行了如下调整:

  1. 引入 scoped storage 机制:在 Android Q 中,应用对外部存储的访问权限被严格限制,应用只能访问自己创建的专属文件夹及其子文件夹。

  2. 废除 WRITE_EXTERNAL_STORAGE 权限:WRITE_EXTERNAL_STORAGE 权限已被废除,应用无法再通过动态申请此权限来获取对整个外部存储的写访问权限。

  3. 新增 MANAGE_EXTERNAL_STORAGE 权限:应用如果需要访问整个外部存储,则需要申请新的 MANAGE_EXTERNAL_STORAGE 权限,但此权限仅限系统应用和某些特殊应用使用。

适配建议

针对上述存储权限变化,应用需要进行相应的适配,以确保在 Android Q 上正常运行。以下是具体的适配建议:

  1. 调整存储访问方式:应用应使用 FileProvider 或 MediaStore 等机制来访问外部存储,而不是直接使用文件路径。

  2. 使用Scoped Storage:应用应在清单文件中声明 android.permission.WRITE_EXTERNAL_STORAGE 权限,并通过 StorageManager.getExternalStorageDirectory() 方法来获取自己专属的存储目录。

  3. 使用SAF(存储访问框架):应用可以使用 Storage Access Framework (SAF) 来访问外部存储,允许用户选择特定文件或文件夹进行读写操作。

  4. 申请 MANAGE_EXTERNAL_STORAGE 权限:对于需要访问整个外部存储的应用,应在清单文件中声明 android.permission.MANAGE_EXTERNAL_STORAGE 权限,并通过 Activity.requestPermissions() 方法动态申请此权限。

微信、qq分享适配

在 Android Q 上,微信、qq 等应用的分享功能也受到存储权限变化的影响。应用如果需要通过微信、qq分享文件,需要进行以下适配:

  1. 在清单文件中声明 android.permission.READ_EXTERNAL_STORAGE 权限,并通过 StorageManager.getExternalStorageDirectory() 方法获取自己专属的存储目录。

  2. 使用 FileProvider 或 MediaStore 等机制来访问外部存储,而不是直接使用文件路径。

  3. 在分享文件时,使用 Intent.EXTRA_STREAM 来传递文件 Uri。

结语

Android Q 的存储权限变化对应用的存储访问方式产生了重大影响。应用需要进行相应的适配,以确保在 Android Q 上正常运行。本文提供的适配建议可以帮助您轻松实现存储、微信、qq分享等操作。