Android Q SD卡权限配置与隔离存储实战指南

1 下载量 111 浏览量 更新于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上能够正常运行并正确处理存储权限问题。