我正在使用原生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,以及应用程序数据文件夹不同。
非常感谢
答案 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)
),媒体管理器将不(能够)为您生成缩略图,因此您可能需要管理自己的缩略图。)