[英]How to save a bitmap on storage in Android Q and later?
在我的應用程序中,我必須將 bitmap 作為 PNG 文件存儲在共享的 memory 中,以使其對圖庫應用程序可見。 首先,我嘗試將圖像存儲在/Android/data/package.name/files/Pictures
中。 我從context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)
得到這條路徑。 Gallery 檢測不到存儲在此目錄中的圖像。 然后我閱讀了一些關於 MediaStore 的文章和 SO 帖子,並嘗試用它保存我的圖像。
這是我用來存儲 bitmap 的 function。它不會引發任何異常,返回 true, bitmap.compress()
也返回 true 但我在設備的 memory 中找不到任何 PNG 圖像。我嘗試使用 Gallery 查找它和文件管理器。 我還嘗試將其更改為保存 JPEG 而不是 PNG,但它也不起作用。
你能幫我弄清楚為什么這個 function 沒有將圖像保存到設備的商店嗎?
我在三星A52s 5G、Android 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);
}
}
您也可以使用此方法。 認為它很長,它更好,因為另一個已被棄用。 使用此代碼:
String filename = "name.png";
File sd = Environment.getExternalStorageDirectory();
File dest = new File(sd, filename);
try {
FileOutputStream out = new FileOutputStream(dest);
bitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
您可以使用一種非常簡單的方法:
MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, filename, "Description");
這已被棄用。 試試這個答案
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.