如何在Android应用程序的图库中显示保存的照片

时间:2018-07-11 23:36:03

标签: java android image uri fileoutputstream

我保存图片并在文件管理器中看到,但是在图库中看不到? 如何解决?

我认为我的错误 Environment.getExternalStorageDirectory().getAbsolutePath() + "/MyFolder";

String file_path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/MyFolder";
File dir = new File(file_path);

if(!dir.exists())
{
    dir.mkdirs();
}

String name = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()).concat(".png");
File file = new File(dir, name);

FileOutputStream fOut;
try {
    fOut = new FileOutputStream(file);
    bitmap.compress(Bitmap.CompressFormat.PNG, 85, fOut);
    fOut.flush();
    fOut.close();

    return Uri.fromFile(file);
} catch (Exception e) {
    e.printStackTrace();
}

return null;

2 个答案:

答案 0 :(得分:1)

您必须将其添加到MediaStore中以使其显示在图库中。以下代码对我有用(将其放在您编写文件的现有代码之后),以使用您自己的自定义说明等手动添加文件...

我在这里保存了它

String dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString();
String path = dir + "/" + filename;

使用与您的代码非常相似的代码,然后使用以下代码将其添加到MediaStore:

long size = new File(path).length();
long currentTime = System.currentTimeMillis();

ContentValues values = new ContentValues(8);
String mimeType = "image/png";
String fileDescription = "My description";

// store the details
values.put(MediaStore.Images.Media.TITLE, name);
values.put(MediaStore.Images.Media.DISPLAY_NAME, name);
values.put(MediaStore.Images.Media.DATE_ADDED, currentTime);
values.put(MediaStore.Images.Media.MIME_TYPE, mimeType);
values.put(MediaStore.Images.Media.DESCRIPTION, fileDescription);
values.put(MediaStore.Images.Media.ORIENTATION, 0);
values.put(MediaStore.Images.Media.DATA, path);
values.put(MediaStore.Images.Media.SIZE, size);

try {
    context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
}
catch(Exception e) {
    e.printStackTrace();
}

答案 1 :(得分:0)

许多图库应用程序依赖MediaStore中缓存的媒体列和数据,而不是实际读取和解析目录。其中一些将触发自动重新扫描,但不是全部。

使用MediaScannerConnection用文件更新MediaStore:

MediaScannerConnection.scanFile(context, new String[]{file.getAbsolutePath()}, null, null);