Android:在DCIM文件夹中复制照片存储

时间:2013-11-12 21:28:05

标签: android photos

我正在使用原生Android相机并将文件保存到应用程序数据文件夹(/ mnt / sdcard / Pictures /)。同时 - 在某些设备上 - 另一张照片副本保存到DCIM文件夹。

这是我的代码:

private void startStockCameraForResult()
{
    // create Intent to take a picture and return control to the calling application
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    // mediaStorageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
    mNextImageFileUri = ImageFileUtils.getOutputMediaFileUri();
    intent.putExtra(MediaStore.EXTRA_OUTPUT, mNextImageFileUri); // set the image file name

    // start the image capture Intent
    startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
}

如何防止在DCIM文件夹中保存图像的其他副本?

我的问题是代码产生了 1张照片:三星Galaxy SIII,华为HUAWEI P2-6011等 2张照片:三星Galaxy SI,Htc HTC One XL等。

其他主题描述将最后添加的图像删除到DCIM。这里的问题是没有问题的设备,如DCIM上的Galaxy SIII和Imagename,以及应用程序数据文件夹不同。

非常感谢

1 个答案:

答案 0 :(得分:3)

AFAIK,您无法可靠地告诉相机应用程序(设备无关)a)保存图像的位置和b)也只保存一次。我不得不采用这种方法:

1)只需删除putExtra(...)语句,即可让相机应用将照片保存到任意位置:

`intent.putExtra(MediaStore.EXTRA_OUTPUT, mNextImageFileUri); // set the image file name`

这个(即设置EXTRA_OUTPUT)将保证只保存一个图像到默认图片位置。

2)查找最后拍摄的照片,并保存其ID,以便以后进行安全检查。 (查询最后一个图像ID,按DATE_TAKEN排序。)

3)触发捕获意图,再次在onActivityResult中获取最后一张图像,并保存其ID,URI和路径。

4)如果你的新图片ID是>比以前保存的那个,继续,否则恐慌...

5)将原始图像文件(使用其路径)移动到首选位置。现在,原始文件已被删除。

6)使用其URI删除原始媒体图像条目。现在,图像也从图库中删除。

7)如果您还想删除缩略图,那么您需要同样查询和删除它们,但我建议不要这样做:设备重启或其他媒体扫描应刷新缩略图缓存。此外,在删除原始图像后,您实际上可能很快就会需要缩略图。 (如果您需要更长时间,则需要小心:如果您将照片移动到私人应用目录(getExternalFilesDir(Environment.DIRECTORY_PICTURES)),媒体管理器将(能够)为您生成缩略图,因此您可能需要管理自己的缩略图。)