簡體   English   中英

如何在 Android Q 及以后的存儲中保存一個 bitmap?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM