Android 11(API 级别 30)及以上版本中,将Bitmap保存到设备上
调用
saveBitmapToMediaStore(getContentResolver(),bitmap,“图片名”,mimeType);
参数解析:
Bitmap myBitmap = ...; // 这里应该是你获取或创建Bitmap的代码
private String mimeType = "image/jpeg"; // 或者"image/png",取决于你的Bitmap格式
ContentResolver contentResolver = getContentResolver(); // 如果你在Activity或Fragment中,可以直接调用getContentResolver()
- contentResolver:
是Android提供的一个用于访问系统级内容提供者(Content Providers)的接口
。它允许你查询和修改由内容提供者管理的数据。在保存图片到MediaStore时,你需要通过ContentResolver来与MediaStore进行交互。 - Bitmap bitmap:
Bitmap是Android中用于表示位图图像的一个类
。在这个函数中,bitmap参数代表了你想要保存到设备上的图片。 - String displayName:
displayName是图片的显示名称,即在文件系统中看到的文件名(不包括文件扩展名)
。这个名称将用于MediaStore中的记录,并且(在某些情况下)也用作实际保存的文件名。 - String mimeType:
mimeType是多用途互联网邮件扩展类型(MIME Type)的字符串表示,它描述了数据的格式和类型
。对于图片,常见的MIME类型包括"image/jpeg"(JPEG格式)和"image/png"(PNG格式)。这个参数告诉MediaStore你的图片是什么类型的,以便它能够正确地处理和索引它。
方法:
public Uri saveBitmapToMediaStore(ContentResolver contentResolver, Bitmap bitmap, String displayName, String mimeType) {
// 确保文件名和MIME类型不为空
if (displayName == null || mimeType == null) {
throw new IllegalArgumentException("DisplayName and MimeType cannot be null");
}
//指定储存的路径
String relativePath= Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath()
+ File.separator+ "Cs";
File file=new File(relativePath);
if (!file.exists()) {
file.mkdirs();
}
// 创建ContentValues来保存图片的信息
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DISPLAY_NAME, displayName);
values.put(MediaStore.Images.Media.MIME_TYPE, mimeType);
values.put(MediaStore.Images.Media.RELATIVE_PATH, relativePath); // API 29+
// 对于Android 10及以上版本,通常不需要指定相对路径
// 但如果你需要,可以考虑使用MediaStore.Images.Media.RELATIVE_PATH(需要API 29+)
// 使用MediaStore的URI来插入图片信息
Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
// 插入图片信息到MediaStore,并获取返回的Uri
Uri resultUri = null;
try {
resultUri = contentResolver.insert(uri, values);
if (resultUri != null) {
// 使用返回的Uri来获取OutputStream,并写入Bitmap
try (OutputStream out = contentResolver.openOutputStream(resultUri)) {
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out); // 或者使用PNG等其他格式
}
}
} catch (Exception e) {
e.printStackTrace();
// 处理异常,例如通知用户保存失败
}
return resultUri; // 返回图片的Uri,可能用于后续操作
}