我正在开发一个 Android 应用程序。用户单击按钮后可以拍照。这张照片将通过以下方法保存到内部包存储(data/data/package/...):
private String saveToInternalSorage(Bitmap bitmapImage){
ContextWrapper cw = new ContextWrapper(getApplicationContext());
File directory = cw.getDir("TEST", Context.MODE_PRIVATE);
File pod = new File(directory, object.getTitle() + "" +
object.getName() + "" + object.getAge() + ".jpg");
FileOutputStream fos = null;
try {
fos = new FileOutputStream(pod);
bitmapImage.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
return pod.getAbsolutePath();
}
也可以从该目录中删除图片。这就像一个魅力。在模拟器和 root 的手机上进行了测试。但照片也保存到公用文件夹DCIM中。我正在使用 HTC ONE mini 进行测试(没有 SD 卡?)。下面的代码显示了拍摄和获取照片的方法。
public void takePhoto() {
cameraintent = new Intent("android.media.action.IMAGE_CAPTURE");
startActivityForResult(cameraintent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE);
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_CAPTURE_IMAGE_REQUEST_CODE) {
if (resultCode == Activity.RESULT_OK) {
Bundle extras = data.getExtras();
Bitmap bmp = (Bitmap) extras.get("data");
setPath(saveToInternalSorage(bmp));
我想防止将照片存储在公共文件夹中。我删除 DCIM 文件夹中最新文件的方法失败了,因为getExternalStorageDirectory() 为我提供了 HTC One mini 上的模拟路径(例如 emulated/sdcard/...)。这绝对不是正确的道路。那么我如何确定照片只会存储到内部包结构中,而不是(没有 SD 卡/有 SD 卡)存储在公共文件夹中。当我必须删除公共文件夹中的照片时,如何获得正确的路径(针对/在不同设备上)?
我找不到“从一开始”就阻止存储在公共文件夹中的解决方案。
提前致谢!
EDIT
下面的方法应该能够从 DCIM/公共文件夹中删除照片。
private void deleteLatestFromDCIM() {
File f = new File(Environment.getExternalStorageDirectory() + "");
File [] files = f.listFiles();
Arrays.sort( files, new Comparator<Object>()
{
public int compare(Object o1, Object o2) {
if (((File)o1).lastModified() > ((File)o2).lastModified()) {
return -1;
} else if (((File)o1).lastModified() < ((File)o2).lastModified()) {
return 1;
} else {
return 0;
}
...
if(files[0].exists())
files[0].delete();
问题是 DCIM/公共文件夹中的照片具有通用名称。见下图:
那么,如何删除我不“知道”名称的图像呢?将照片存储在内存中效果很好!我不会将它们放在公共文件夹中。通过 getExternalStorageDirectory() 方法,我得到了如上所述的模拟路径。这真的是 DCIM/public 文件夹的路径吗?