捕获然后将图像保存到图库不工作有时

时间:2018-04-18 14:14:59

标签: android camera save gallery android-mediascanner

我有一种启动相机并拍照的方法(使用API​​ 24及更高版本):

public void invokeCamera()
{
    // create the image Uri
    Uri pictureUri = FileProvider.getUriForFile(getContext(),getContext().getPackageName() + ".provider",createImageFile());


    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    // tell the camera where to save
    intent.putExtra(MediaStore.EXTRA_OUTPUT,pictureUri);

    // permission for saving the image
    intent.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

    startActivityForResult(intent,CAPTURE_REQ_CODE);
}

创建图像文件:

private File createImageFile() {

    File picturesDirectory  = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);

    String imgName = "myImageName_0X0Y02_test.jpg";

    return  new File(picturesDirectory.getPath(),"picture" + imgName );

}
  • 问题

这段代码工作没有错误但有时我看不到画廊中的图像,有时当我在大约10分钟后打开画廊时,我看到它!这很奇怪,我很困惑,我错过了什么?

  • 授予所有权限(相机和对存储的完全访问权限)

2 个答案:

答案 0 :(得分:1)

由于您使用的是API 24及更高版本,我将仅为其提供代码。基本上,您需要告诉媒体扫描程序添加了一个文件,以便它可以立即扫描并添加:

public static void scanMediaForChanges(Context context, File file){
    MediaScannerConnection.scanFile(context,
            new String[]{file.toString()}, null,
            new MediaScannerConnection.OnScanCompletedListener() {
                public void onScanCompleted(String path, Uri uri) {
                    Log.i("ExternalStorage", "Scanned " + path + ":");
                    Log.i("ExternalStorage", "-> uri=" + uri);
                }
            });
}

答案 1 :(得分:-2)

您遇到此问题的号码是####。您应该告诉媒体商店您的新文件。

为此,请为您的文件调用媒体扫描程序。

代码已发布###次。所以谷歌。