2011-08-18 88 views
1

我使用以下意图:图像被保存两次

Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
i.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, uri); 

基本上我使用ACTION_IMAGE_CAPTURE意图调用相机和拍摄的图像保存到指定的URI。

它的作品,但同时图像也保存在默认名称。

因此,一旦我拍下了照片,它将被保存两次,包括uri和默认路径和名称。

我如何确保它只保存在指定的uri中?

由于事先 Perumal

+0

不'putExtra'并获得图像从默认路径和名称! –

+0

但我的意图是每次使用此应用拍摄照片时,都应该替换照片。这就是原因。是否可行? – perumal316

回答

1

您可以乘坐ID或画廊最后一个图像的绝对路径。并删除它。

这是可以做到这样的:

/** 
* Gets the last image id from the media store 
* @return 
*/ 
private int getLastImageId(){ 
    final String[] imageColumns = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA }; 
    final String imageOrderBy = MediaStore.Images.Media._ID+" DESC"; 
    Cursor imageCursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageColumns, null, null, imageOrderBy); 
    if(imageCursor.moveToFirst()){ 
     int id = imageCursor.getInt(imageCursor.getColumnIndex(MediaStore.Images.Media._ID)); 
     String fullPath = imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA)); 
     Log.d(TAG, "getLastImageId::id " + id); 
     Log.d(TAG, "getLastImageId::path " + fullPath); 
     imageCursor.close(); 
     return id; 
    }else{ 
     return 0; 
    } 
} 

,并删除文件:

private void removeImage(int id) { 
    ContentResolver cr = getContentResolver(); 
    cr.delete(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, MediaStore.Images.Media._ID + "=?", new String[]{ Long.toString(id) }); 
} 

此代码是基于岗位:Deleting a gallery image after camera intent photo taken

+0

欣赏这个答案,你知道这是否是一种常见的工作吗? –

+0

@ChrisConway我不确定这是否是最好的方法。但我相信,当您使用默认的Camera Intent时,图像将始终保存到图库中。另一个解决方案是不使用这个Intent,你可以创建你自己的相机SurfaceView。 – Derzu

+0

是的,或者像@SherifelKhatib说的那样,把它保存到默认目录。 –