Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get Path of image from ACTION_IMAGE_CAPTURE Intent

Tags:

Hi I am using ACTION_IMAGE_CAPTURE for capturing image using Intent as follows:

Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); cameraIntent.putExtra( MediaStore.EXTRA_OUTPUT, (new File(Environment.getExternalStorageDirectory(), String.valueOf(System.currentTimeMillis()) + ".jpg")) ); startActivityForResult(cameraIntent, 0); 

I need to store image in an sdcard and retrieve the path of that image using the onActivityResult method. I don't know how to get the image path of the currently captured image.

If any one knows please help.

Thanks

like image 314
iCoder86 Avatar asked Nov 15 '10 13:11

iCoder86


2 Answers

This is how it works on 2.2 (different than on previous versions). When starting intent

        String fileName = "temp.jpg";           ContentValues values = new ContentValues();           values.put(MediaStore.Images.Media.TITLE, fileName);           mCapturedImageURI = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);           intent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI);           startActivityForResult(intent, CAPTURE_PICTURE_INTENT); 

you need to remember mCapturedImageURI.

When you capture image, in onActivityResult() use that URI to obtain file path:

            String[] projection = { MediaStore.Images.Media.DATA};              Cursor cursor = managedQuery(mCapturedImageURI, projection, null, null, null);              int column_index_data = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);              cursor.moveToFirst();              String capturedImageFilePath = cursor.getString(column_index_data); 

UPDATE: On new Android devices you would not need MediaStore.EXTRA_OUTPUT, but you rather deduce image/video URI from data.getData() received from onActivityResult(..., Intent data), as nicely described under

Android ACTION_IMAGE_CAPTURE Intent

However, since this part is subject to manufacturer adaptation, you may still encounter phones where "old" approach may be useful.

like image 52
Zelimir Avatar answered Nov 21 '22 22:11

Zelimir


Another way, tested on android 2.1, is take the ID or AbsolutePath of the gallery last 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 29
Derzu Avatar answered Nov 21 '22 22:11

Derzu