在我的应用程序中,我必须将一个位图以PNG文件的形式存储在共享内存中,以使其在Gallery应用程序中可见。首先,我尝试将图像存储在/Android/data/package.name/files/Pictures
中。我从context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)
中获得了此路径。存储在此目录中的图像不会被Gallery检测到。然后,我阅读了一些关于MediaStore的文章和帖子,并尝试将图像与它一起保存。
这是一个我用来存储位图的函数。它不抛出任何异常,返回true,bitmap.compress()
也返回true,但我在设备内存中找不到任何PNG图像。我尝试使用图库和文件管理器查找它。我还尝试将它改为保存JPEG而不是PNG,但它也不起作用。
你能帮我找出为什么这个功能不保存图像到设备的存储?
我在三星A52s 5G、安卓12、OneUI 4.0上进行了测试。
private boolean saveImageToStorageAndroidQ(Bitmap bitmap, String filename) {
filename = filename + ".png";
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DISPLAY_NAME, filename);
values.put(MediaStore.Images.Media.MIME_TYPE, "image/png");
values.put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_PICTURES);
final ContentResolver resolver = getActivity().getContentResolver();
final Uri contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
Uri uri = resolver.insert(contentUri, values);
try {
OutputStream imageOutStream = resolver.openOutputStream(uri);
bitmap.compress(Bitmap.CompressFormat.PNG, 95, imageOutStream);
imageOutStream.flush();
imageOutStream.close();
return true;
} catch (Exception e) {
return false;
} finally {
if (uri != null)
resolver.delete(uri, null, null);
}
}
2条答案
按热度按时间7nbnzgx91#
你也可以使用这个方法。虽然它很长,但由于other one已经被弃用,所以它更好。使用以下代码:
nzk0hqpo2#
你可以使用一个非常简单的方法:
此选项已过时。请尝试this答案