1

我正在使用本机 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 的图像。这里的问题是像 Galaxy SIII 这样没有问题的设备,DCIM 和应用程序数据文件夹上的 Imagename 是不同的。

非常感谢

4

1 回答 1

4

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 大于之前保存的图片 ID,请继续,否则恐慌...

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

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

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

于 2014-01-08T02:51:30.353 回答