Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Built-in Camera, using the extra MediaStore.EXTRA_OUTPUT stores pictures twice (in my folder, and in the default)

Tags:

I'm currently developing an app which uses the built-in Camera. I call this snippet by clicking a button :

Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); //Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);  String path = Environment.getExternalStorageDirectory().getAbsolutePath(); path += "/myFolder/myPicture.jpg"; File file = new File( path ); //file.mkdirs(); Uri outputFileUri = Uri.fromFile( file ); //String absoluteOutputFileUri = file.getAbsolutePath();  intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); startActivityForResult(intent, 0); 

After taking the picture with the camera, the jpg is well stored in sdcard/myFolder/myPicture.jpg, but it is also stored in /sdcard/DCIM/Camera/2011-06-14 10.36.10.jpg, which is the default path.

Is there a way to prevent the built-in Camera to store the picture in the default folder?

Edit : I think I will use the Camera class directly

like image 614
darksider Avatar asked Jun 14 '11 09:06

darksider


1 Answers

Another way, tested on android 2.1, is take the ID or Absolute path of the gallery last image, then you can delete the duplicated image.

It can be done like that:

/**  * 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;     } } 

And to remove the file:

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

This code was based on the post: Deleting a gallery image after camera intent photo taken

like image 185
Derzu Avatar answered Sep 17 '22 15:09

Derzu