Obtener ruta de acceso de ACTION_IMAGE_CAPTURE intención

Hola, estoy usando ACTION_IMAGE_CAPTURE para capturar imágenes usando Intent siguiente manera:

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

Necesito almacenar la imagen en una tarjeta SD y recuperar la ruta de esa imagen usando el método onActivityResult . No sé cómo obtener la ruta de la imagen capturada actualmente.

Si alguien sabe por favor ayude.

Gracias

Así es como funciona en 2.2 (diferente a las versiones anteriores). Al comenzar bash

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

debes recordar mCapturedImageURI .

Cuando capture una imagen, en onActivityResult() use ese URI para obtener la ruta del archivo:

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

ACTUALIZACIÓN: en los nuevos dispositivos Android no necesitaría MediaStore.EXTRA_OUTPUT, pero usted más bien deduce el URI de imagen / video de data.getData () recibido de onActivityResult (…, datos de intención), como se describe muy bien en

Android ACTION_IMAGE_CAPTURE intención

Sin embargo, dado que esta parte está sujeta a la adaptación del fabricante, es posible que aún encuentre teléfonos donde el enfoque “antiguo” puede ser útil.

Otra forma, probada en Android 2.1, es tomar la ID o AbsolutePath de la última imagen de la galería.

Se puede hacer así:

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

Y para eliminar el archivo:

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

Este código se basó en la publicación: Eliminar una imagen de la galería después de tomar la foto de la cámara

Esta pregunta es muy antigua, pero he estado luchando con el mismo problema durante medio día. El problema es que su bash de ACTION_IMAGE_CAPTURE siempre devolverá code=-1 y data=null menos que configure los siguientes permisos para la aplicación en su archivo AndroidManifest.xml :

  

También puede establecer lo siguiente si desea grabar audio desde su aplicación:

  

retirar

 intent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI); 

y añadir

 Uri uri = data.getData();in onActivityResult