Search code examples
androidnativeandroid-cameraandroid-sdcardandroid-camera-intent

Stop saving photos using Android native camera


I am using native Android camera and save file to my application data folder (/mnt/sdcard/Android/data/com.company.app/files/Pictures/). At the same time anther copy of photo is saved to DCIM folder.

This is my code:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
String formattedImageName = getDateString() + ".jpg";
File image_file = new File(this.getExternalFilesDir(Environment.DIRECTORY_PICTURES), formattedImageName);
Uri imageUri = Uri.fromFile(image_file);
intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri);
startActivityForResult(intent, REQUEST_FROM_CAMERA);

How can I prevent saving additional copy of image to DCIM folder?

Many Thanks


Solution

  • check this code..

    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());
    } 
    

    and this is where the method is doing all magic

     /** Method will check all the photo is the gallery and delete last captured and move it to the required folder.
     */
    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());   
            }         
        }       
    
    }