Android 11 将 Bitmap 保存到 SD 卡的指南
在 Android 11 中,Google 对存储权限做出了重大更改,特别是对于如何访问外部存储(如 SD 卡)。这意味着如果你的应用想要保存 Bitmap 文件到 SD 卡,你需要使用新的 API,遵循新的权限管理规定。本文将为你介绍如何在 Android 11 中将 Bitmap 保存到 SD 卡,并提供代码示例。
1. 使用 Storage Access Framework
在 Android 10 及以上版本中,建议使用 Storage Access Framework。通过此框架,用户可以选择文件存储位置。你可以使用 Intent
启动选择文件的界面。以下是使用 Storage Access Framework 的步骤。
1.1. 请求权限
在 Android 11 中,申请存储权限的代码如下:
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE);
}
这里,REQUEST_CODE
是你设定的请求代码。
1.2. 启动文件选择器
通过以下代码启动文件选择器,用户可以选择存储位置:
Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/png");
intent.putExtra(Intent.EXTRA_TITLE, "my_image.png");
startActivityForResult(intent, CREATE_FILE);
1.3. 处理选择结果
当用户选择了存储位置后,你可以在 onActivityResult
方法中处理:
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == CREATE_FILE && resultCode == Activity.RESULT_OK) {
Uri uri = data.getData();
saveBitmapToUri(myBitmap, uri);
}
}
1.4. 保存 Bitmap 到指定 URI
接下来,你可以使用以下代码将 Bitmap 保存到用户选定的 URI:
private void saveBitmapToUri(Bitmap bitmap, Uri uri) {
try {
OutputStream outputStream = getContentResolver().openOutputStream(uri);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream);
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
这段代码用于打开输出流,并将 Bitmap 数据写入到指定的 URI 中。
2. 注意事项
注意事项 | 描述 |
---|---|
权限管理 | Android 11 要求动态管理权限 |
使用 Storage Access Framework | 始终使用 SAF 进行文件操作 |
Bitmap 格式 | 可以选择 PNG、JPEG 等格式 |
关闭输出流 | 在写入图像后务必要关闭输出流 |
结论
在 Android 11 中,将 Bitmap 保存到 SD 卡稍微复杂,但通过使用 Storage Access Framework,开发者可以有效地实现此功能。通过请求必要的权限、启动文件选择器以及保存 Bitmap 到用户选择的位置,你的应用将更符合 Android 的存储政策。
希望本文对你理解 Android 11 中如何处理 Bitmap 保存有所帮助。如果你有任何问题或需要进一步讨论,请随时联系我!