2012-01-12 94 views
2

我通過在我的應用程序中使用相機捕獲圖像。從相機捕捉圖像,它存儲在SD卡/ dcim文件夾中

1)它保存圖像在SD卡上,與我通過意圖的名稱。

2)還保存圖像的SD卡/ DCIM文件夾

我不想相機保存圖像在#2 我從位置#1刪除圖像提到的位置。並且想要從#2中的位置刪除圖像。

下面是捕獲圖像的代碼片段。

SD_CARD_TEMP_DIR = Environment.getExternalStorageDirectory() + File.separator + "tempImage.jpg"; 
    file =new File(SD_CARD_TEMP_DIR); 
    Intent takePictureFromCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    takePictureFromCameraIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, Uri.fromFile(file)); 
    startActivityForResult(takePictureFromCameraIntent, TAKE_PICTURE_WITH_CAMERA); 
+0

發表一些關於你到現在爲止所做的一些代碼 – 2012-01-12 19:12:02

回答

1

這個Thread幫我解決了這個問題。 現在我在做什麼,1)捕獲圖像,2)讀取Media uri中的最後一張圖像,並刪除它。

private void FillPhotoList() { 
// initialize the list!  
GalleryList.clear();  
String[] projection = { MediaStore.Images.ImageColumns.DISPLAY_NAME }; 
for(int i=0;i<projection.length;i++) 
    Log.i("InfoLog","projection "+projection[0].toString()); 
// intialize the Uri and the Cursor, and the current expected size.  
Cursor c = null;  
Uri u = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; 
Log.i("InfoLog","FillPhoto Uri u "+u.toString()); 
// Query the Uri to get the data path. Only if the Uri is valid.  
if (u != null)  
{  
    c = managedQuery(u, projection, null, null, null);  
}  
// If we found the cursor and found a record in it (we also have the id).  
if ((c != null) && (c.moveToFirst()))  
{  
    do   
    {   
     // Loop each and add to the list.   
     GalleryList.add(c.getString(0)); // adding all the images sotred in the mobile phone(Internal and SD card) 

    }    
    while (c.moveToNext());  
} 
Log.i(INFOLOG,"gallery size "+ GalleryList.size()); 
     } 


public void movingCapturedImageFromDCIMtoMerchandising() 
    { 

// This is ##### ridiculous. Some versions of Android save   
// to the MediaStore as well. Not sure why! We don't know what   
// name Android will give either, so we get to search for this   
// manually and remove it.   
String[] projection = { MediaStore.Images.ImageColumns.SIZE, 
     MediaStore.Images.ImageColumns.DISPLAY_NAME, 
     MediaStore.Images.ImageColumns.DATA, 
     BaseColumns._ID,}; 
// intialize the Uri and the Cursor, and the current expected size. 

for(int i=0;i<projection.length;i++) 
    Log.i("InfoLog","on activityresult projection "+projection[i]); 
//+" "+projection[1]+" "+projection[2]+" "+projection[3] this will be needed if u remove the for loop 
Cursor c = null;   
Uri u = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;  
Log.i("InfoLog","on activityresult Uri u "+u.toString()); 

if (CurrentFile != null)  
{       
    // Query the Uri to get the data path. Only if the Uri is valid,  
    // and we had a valid size to be searching for.  
    if ((u != null) && (CurrentFile.length() > 0))   
    {    
     //****u is the place from data will come and projection is the specified data what we want 
     c = managedQuery(u, projection, null, null, null);  
    }   
    // If we found the cursor and found a record in it (we also have the size). 
    if ((c != null) && (c.moveToFirst()))  
    {    
     do    
     {     
      // Check each area in the gallery we built before.  
      boolean bFound = false;    
      for (String sGallery : GalleryList)     
      {      
       if (sGallery.equalsIgnoreCase(c.getString(1))) 
       {      
        bFound = true; 
        Log.i("InfoLog","c.getString(1) "+c.getString(1)); 
        break;      
       }     
      }     
      // To here we looped the full gallery.     
      if (!bFound)  //the file which is newly created and it has to be deleted from the gallery    
      {      
       // This is the NEW image. If the size is bigger, copy it.   
       // Then delete it!      
       File f = new File(c.getString(2)); 




       // Ensure it's there, check size, and delete!    
       if ((f.exists()) && (CurrentFile.length() < c.getLong(0)) && (CurrentFile.delete()))  
       {      
        // Finally we can stop the copy.  
        try      
        {       
         CurrentFile.createNewFile();  
         FileChannel source = null; 
         FileChannel destination = null; 
         try       
         {       
          source = new FileInputStream(f).getChannel(); 
          destination = new FileOutputStream(CurrentFile).getChannel(); 
          destination.transferFrom(source, 0, source.size()); 
         } 
         finally      
         { 
          if (source != null)   
          { 
           source.close(); 
          }  
          if (destination != null) 
          { 
           destination.close(); 
          }        
         }      
        }       
        catch (IOException e)     
        {        
         // Could not copy the file over.  
         ToastMaker.makeToast(this, "Error Occured", 0); 
        }      
       }     
       //****deleting the file which is in the gallery       
       Log.i(INFOLOG,"imagePreORNext1 "+imagePreORNext); 
       Handler handler = new Handler(); 
       //handler.postDelayed(runnable,300); 
       Log.i(INFOLOG,"imagePreORNext2 "+imagePreORNext); 
       ContentResolver cr = getContentResolver();  
       cr.delete(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, BaseColumns._ID + "=" + c.getString(3), null); 

       break;           
      }    
     }    
     while (c.moveToNext()); 
    }   
}  

} 
0

您可以使用以下方法:首先,我們得通過檢查上次保存的圖像這是最後一次修改的圖像。比簡單地刪除它。

private boolean deleteLastFromDCIM() { 

     boolean success = false; 
     try { 
      File[] images = new File(Environment.getExternalStorageDirectory() 
        + File.separator + "DCIM/Camera").listFiles(); 
      File latestSavedImage = images[0]; 
      for (int i = 1; i < images.length; ++i) { 
       if (images[i].lastModified() > latestSavedImage.lastModified()) { 
        latestSavedImage = images[i]; 
       } 
      } 

        // OR just use success = latestSavedImage.delete(); 
      success = new File(Environment.getExternalStorageDirectory() 
        + File.separator + "DCIM/Camera/" 
        + latestSavedImage).delete(); 
      return success; 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return success; 
     } 

    } 
相關問題