android - picture - Obtener ruta de acceso de ACTION_IMAGE_CAPTURE intención
open camera android studio (4)
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 intento
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.
Esta pregunta es muy antigua, pero he estado luchando con el mismo problema durante medio día. El problema es que su intento 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
:
<uses-permission android:name="android.permission.CAMERA"/>
También puede establecer lo siguiente si desea grabar audio desde su aplicación:
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
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
retirar
intent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI);
y añadir
Uri uri = data.getData();in onActivityResult