【发布时间】:2014-04-18 17:36:21
【问题描述】:
我正在开发一个 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();
}
也可以从此目录中删除图片。这就像一个魅力。在模拟器和植根手机上测试。但照片也保存到公共文件夹 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 卡)在公共文件夹中。当我必须删除公用文件夹中的照片时,我该如何获得正确的路径(用于/在不同设备上)?
我没有找到“从一开始”就阻止在公用文件夹中存储的解决方案。
提前致谢!
编辑
下面的方法应该可以从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/public 文件夹中的照片获得了通用名称。见下图:
那么,如何删除我“不知道”名称的图像?将照片存储在内存中工作正常!我不会将它们放在公共文件夹中。通过 getExternalStorageDirectory() 方法,我得到了一个如上所述的模拟路径。这真的是 DCIM/public 文件夹的路径吗?
【问题讨论】:
-
getExternalStorageDirectory(),在您的链接中提到,并没有给我上面描述的正确路径。
-
明白了。您是否尝试过通过仿真查看它是否有效。我知道这听起来很奇怪,但是如果我打开我的文件管理器,它会模拟所有内容,但如果我从文件管理器中删除它,它就会从我的记忆中删除。可能是类似的情况,不太确定。抱歉,并没有真正阅读我发布的整个链接,只是看到它与您的思路一致并有解决方案。
-
您应该知道,在最近的 android 版本中,应用程序和 ddms 文件探索会看到 不同 路径到 same 位置。
-
与 DDMS 或文件资源管理器无关...
标签: android image path storage