Android 11 分区存储指南
随着 Android 11 的发布,分区存储(Scoped Storage)成为了应用开发中的一个新特性。分区存储旨在提高用户隐私保护,限制应用对文件的访问范围。作为一名经验丰富的开发者,我将指导你如何实现 Android 11 分区存储。
分区存储流程
以下是实现分区存储的流程图:
flowchart TD
A[开始] --> B{检查API等级}
B -->|API等级<30| C[使用旧版存储方式]
B -->|API等级>=30| D[使用分区存储]
D --> E[配置Manifest]
E --> F[请求存储访问权限]
F --> G[使用MediaStore或Storage Access Framework]
G --> H[管理文件访问]
H --> I[结束]
详细步骤
1. 检查API等级
首先,检查设备的 API 等级。如果 API 等级小于 30,你可以使用旧版的存储方式。如果 API 等级大于或等于 30,你需要使用分区存储。
2. 配置Manifest
在 AndroidManifest.xml
文件中,添加必要的权限:
<manifest xmlns:android="
package="com.example.scopedstorage">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 其他必要的权限 -->
</manifest>
3. 请求存储访问权限
在 Android 11 中,你需要请求存储访问权限。你可以使用以下代码请求权限:
if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(thisActivity,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
}
4. 使用MediaStore或Storage Access Framework
在 Android 11 中,你不能直接访问 /storage/emulated/0/
目录。你需要使用 MediaStore
或 Storage Access Framework
来访问文件。
使用MediaStore
ContentResolver contentResolver = getContentResolver();
Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
Cursor cursor = contentResolver.query(uri, null, null, null, null);
使用Storage Access Framework
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
startActivityForResult(intent, PICK_IMAGE_REQUEST);
5. 管理文件访问
在分区存储中,你需要管理文件的访问。你可以使用 FileProvider
来共享文件。
在 AndroidManifest.xml
中添加 FileProvider
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.example.scopedstorage.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
创建 file_paths.xml
<paths xmlns:android="
<external-files-path name="my_files" path="." />
</paths>
使用 FileProvider
获取文件的 URI
File file = new File(getExternalFilesDir(null), "example.txt");
Uri contentUri = FileProvider.getUriForFile(this,
"com.example.scopedstorage.fileprovider", file);
结语
通过以上步骤,你可以实现 Android 11 分区存储。这不仅可以提高用户隐私保护,还可以让你的应用更加安全。希望这篇文章能帮助你更好地理解和实现分区存储。祝你开发顺利!