Android Q SD卡权限配置与隔离存储实战指南
153 浏览量
更新于2024-09-03
收藏 76KB PDF 举报
"本文主要探讨了在Android Q中如何处理SD卡权限的问题,提供了解决方案,包括临时停用分区存储行为以及实现隔离存储的方法。文章通过具体的代码示例进行了详细解释,对于开发者来说具有很高的参考价值。"
在Android Q中,系统对SD卡(外部存储)的访问权限进行了严格的限制,以提高用户数据的安全性。默认情况下,如果应用以Android Q为目标平台,它只能访问到应用自己的私有目录,而不能随意读写所有外部存储空间。以下是两种应对策略:
1. 临时停用分区存储行为:
如果你的应用需要兼容Android Q并需要访问完整的外部存储,可以在应用的清单文件(`AndroidManifest.xml`)中添加`requestLegacyExternalStorage`属性,并将其值设置为`true`。这样,你的应用将在Android Q上也能拥有类似Android 9及以下版本的存储权限。例如:
```xml
<manifest>
<!-- This attribute is "false" by default on apps targeting Android Q. -->
<application android:requestLegacyExternalStorage="true">
...
</application>
</manifest>
```
2. 如何实现隔离存储:
- 申请PRIVATE_FLAG_REQUEST_LEGACY_EXTERNAL_STORAGE标记:
在`PackageParser.java`中,当应用的目标SDK版本小于Android Q时,系统会为`ApplicationInfo`对象设置`PRIVATE_FLAG_REQUEST_LEGACY_EXTERNAL_STORAGE`标志。这表示应用请求保留旧版的外部存储访问权限。
```java
if (sa.getBoolean(
R.styleable.AndroidManifestApplication_requestLegacyExternalStorage,
owner.applicationInfo.targetSdkVersion < Build.VERSION_CODES.Q)) {
ai.privateFlags |= ApplicationInfo.PRIVATE_FLAG_REQUEST_LEGACY_EXTERNAL_STORAGE;
}
```
- grantRuntimePermission()与重新挂载视图:
当应用启动时,系统会根据这个标志来决定是否挂载运行时的视图,使得应用能够访问到外部存储。`grantRuntimePermission()`方法在此过程中起到关键作用,它允许应用在运行时获取所需的权限,从而实现对外部存储的访问。
这些更改是Android Q为了适应新的隐私政策而做出的调整。开发人员需要根据应用的需求,决定是否需要申请旧版的外部存储访问权限,或者更新代码以遵循新的存储访问模式,例如使用`Context.getExternalFilesDir()`来存储应用专属的文件。
理解并适配Android Q的SD卡权限变化对于开发者至关重要,这将直接影响到应用在新系统上的功能和用户体验。通过上述方法,开发者可以确保应用在Android Q上能够正常运行并正确处理存储权限问题。
2021-01-21 上传
2021-01-03 上传
点击了解资源详情
点击了解资源详情
2019-03-05 上传
2020-08-27 上传
2020-08-27 上传
2021-01-20 上传
weixin_38712899
- 粉丝: 4
- 资源: 941
最新资源
- Angular实现MarcHayek简历展示应用教程
- Crossbow Spot最新更新 - 获取Chrome扩展新闻
- 量子管道网络优化与Python实现
- Debian系统中APT缓存维护工具的使用方法与实践
- Python模块AccessControl的Windows64位安装文件介绍
- 掌握最新*** Fisher资讯,使用Google Chrome扩展
- Ember应用程序开发流程与环境配置指南
- EZPCOpenSDK_v5.1.2_build***版本更新详情
- Postcode-Finder:利用JavaScript和Google Geocode API实现
- AWS商业交易监控器:航线行为分析与营销策略制定
- AccessControl-4.0b6压缩包详细使用教程
- Python编程实践与技巧汇总
- 使用Sikuli和Python打造颜色求解器项目
- .Net基础视频教程:掌握GDI绘图技术
- 深入理解数据结构与JavaScript实践项目
- 双子座在线裁判系统:提高编程竞赛效率