将位图图像保存到图库的特定位置 android 10
Save bitmap image to specific location of gallery android 10
我正在使用此代码:
MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, "title" , "description");
并且运行良好。
问题:
- 它正在图库中自动创建一个名为 “图片” 的文件夹。但我想要不同的名称,例如我的应用名称。
- MediaStore 的 insertImage() 函数在 android 10:
中被 折旧
public static String insertImage (ContentResolver cr,
String imagePath,
String name,
String description)
This method was deprecated in API level 29.
inserting of images should be performed using MediaColumns#IS_PENDING, which offers richer control over lifecycle.
我已经阅读了文档,但并不真正理解 IS_PENDING 以及如何使用它。
试试这个代码:-
private void saveImage(Bitmap bitmap, @NonNull String name) throws IOException {
boolean saved;
OutputStream fos;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
ContentResolver resolver = mContext.getContentResolver();
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, name);
contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/png");
contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, "DCIM/" + IMAGES_FOLDER_NAME);
Uri imageUri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
fos = resolver.openOutputStream(imageUri);
} else {
String imagesDir = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DCIM).toString() + File.separator + IMAGES_FOLDER_NAME;
File file = new File(imagesDir);
if (!file.exists()) {
file.mkdir();
}
File image = new File(imagesDir, name + ".png");
fos = new FileOutputStream(image);
}
saved = bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.flush();
fos.close();
}
我正在使用此代码:
MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, "title" , "description");
并且运行良好。
问题:
- 它正在图库中自动创建一个名为 “图片” 的文件夹。但我想要不同的名称,例如我的应用名称。
- MediaStore 的 insertImage() 函数在 android 10: 中被 折旧
public static String insertImage (ContentResolver cr, String imagePath, String name, String description)
This method was deprecated in API level 29. inserting of images should be performed using MediaColumns#IS_PENDING, which offers richer control over lifecycle.
我已经阅读了文档,但并不真正理解 IS_PENDING 以及如何使用它。
试试这个代码:-
private void saveImage(Bitmap bitmap, @NonNull String name) throws IOException {
boolean saved;
OutputStream fos;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
ContentResolver resolver = mContext.getContentResolver();
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, name);
contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/png");
contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, "DCIM/" + IMAGES_FOLDER_NAME);
Uri imageUri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
fos = resolver.openOutputStream(imageUri);
} else {
String imagesDir = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DCIM).toString() + File.separator + IMAGES_FOLDER_NAME;
File file = new File(imagesDir);
if (!file.exists()) {
file.mkdir();
}
File image = new File(imagesDir, name + ".png");
fos = new FileOutputStream(image);
}
saved = bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.flush();
fos.close();
}