android - proyectos - Obtener ruta y nombre de archivo del resultado de la cámara
manual programacion android (3)
Cuando está iniciando ACTION_IMAGE_CAPTURE
, puede pasar un MediaStore.EXTRA_OUTPUT
adicional como el URI
del archivo donde desea guardar la imagen.
Aquí hay un ejemplo simple:
File file = new File(path);
Uri outputFileUri = Uri.fromFile(file);
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, TAKE_PICTURE);
EDITAR: Acabo de file.createNewFile()
en mi dispositivo y file.createNewFile()
resolvió el problema por mí.
Quiero hacer una foto con la intención de la cámara y guardarla en la carpeta DCIM predeterminada. Luego quiero obtener la ruta / nombre de archivo donde se almacena la imagen.
Lo estoy probando con el siguiente código:
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, TAKE_PICTURE);
Con este código, la cámara se abre y, después de tomar una foto, se cierra y guarda la imagen en la carpeta de imágenes predeterminada (generalmente / dcim / camera o sdcard / dcim / camera ...)
pero ¿cómo puedo obtener la ruta y el nombre de archivo de la imagen tomada ahora? He intentado casi todo en onActivityResult
he intentado
String result = data.getData();
y
String result = data.getDataString();
y
String result = data.toURI();
y
Uri uri = data.getData();
etc.
Investigué los últimos dos días para encontrar una solución para esto, hay muchos artículos en la web y en stackoverflow pero nada funciona. No quiero una miniatura, solo quiero la ruta (uri?) A la imagen que ha tomado la cámara.
Gracias por cualquier ayuda
EDITAR: Cuando intento:
path=Environment.DIRECTORY_DCIM + "/test.jpg";
File file = new File(path);
Uri outputFileUri = Uri.fromFile(file);
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, TAKE_PICTURE);
no almacena la imagen como test.jpg pero con el nombre de imagen normal 2011-10-03 ..... jpg (pero eso también está bien, solo necesito la ruta de acceso a la imagen, no importa cuál sea el nombre es).
Atentamente
EDITAR de nuevo
path=Environment.getExternalStorageDirectory().getPath() + "/DCIM/Camera/";
File file = new File(path,"test111111111.jpg");
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
Uri outputFileUri = Uri.fromFile(file);
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, TAKE_PICTURE);
Cuando intento esto, almacena la imagen en la carpeta correcta y con el nombre dado (por ejemplo, test111111.jpg). Pero, ¿cómo puedo obtener el filepath ahora en onActivityResult?
La imagen se almacenará dos veces, primero en la carpeta de la galería, y luego en el archivo que especificó en el método putExtra (MediaStore.EXTRA_OUTPUT, ruta).
Puedes obtener la última foto tomada haciendo eso:
/**
* 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;
}
}
Esta muestra se basó en la publicación: Eliminación de una imagen de la galería después de tomar la foto de la intención de la cámara
Puedes usarlo así en onActivityResult ()
if(requestCode==CAMERA_CAPTURE)
{
Cursor cursor = getContentResolver().query(Media.EXTERNAL_CONTENT_URI, new String[]{Media.DATA, Media.DATE_ADDED, MediaStore.Images.ImageColumns.ORIENTATION}, Media.DATE_ADDED, null, "date_added ASC");
if(cursor != null && cursor.moveToFirst())
{
do
{
String picturePath =cursor.getString(cursor.getColumnIndex(Media.DATA));
Uri selectedImage = Uri.parse(picturePath);
}
while(cursor.moveToNext());
cursor.close();
File out = new File(picturePath);
try
{
mOriginal = decodeFile(out);
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
mSelected.setImageBitmap(mOriginal);
}
}