2011-08-18 78 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說的那樣,把它保存到默認目錄。 –