studio proyectos programacion para guia desarrollo avanzado aplicaciones android camera android-intent uri image

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