2011-10-03 710 views
16

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 del archivo donde se almacena la imagen.Obtener ruta y nombre de archivo del resultado de intento de cámara

que estoy tratando 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 haber tomado una imagen que se cierra y guarda la imagen en la carpeta de imágenes por defecto (normalmente/DCIM/cámara o sdcard/dcim/cámara ...)

pero ¿cómo puedo obtener la ruta y el nombre de archivo de la imagen tomada ahora? He intentado casi todo en onActivityResult Probé

String result = data.getData(); 

y

String result = data.getDataString(); 

y

String result = data.toURI(); 

y

Uri uri = data.getData(); 

correo tc.

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

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

que no almacena la imagen como test.jpg pero con el nombre de imagen normal .. 2011-10-03 ... jpg (pero eso está bien también, solo necesito el camino a la imagen, no importa cuál es el nombre).

Saludos

EDITAR Una vez más

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, se almacena la imagen en la carpeta correcta y con el nombre dado (por ejemplo test111111.jpg). Pero, ¿cómo puedo obtener el archivo ahora en onActivityResult?

+6

allready conoce el camino ... desde que creas tu archivo. puede mantener el archivo o la ruta como una variable miembro de su Actividad –

Respuesta

1

Cuando inicia ACTION_IMAGE_CAPTURE puede pasar MediaStore.EXTRA_OUTPUT como el URI del archivo donde desea guardar la imagen.

Aquí está un ejemplo sencillo:

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

EDIT: he intentado en mi dispositivo y file.createNewFile() resuelto el problema para mí.

+0

Hola, gracias por su respuesta rápida, pero no funciona como se esperaba. Explicaré arriba. – bihcoder

+0

He respondido anteriormente con el código. – bihcoder

+0

una pregunta tonta tal vez ... ¿ha agregado el permiso en el Manifiesto? android.permission.CAMERA? sí ... puede funcionar sin permiso algunas veces –

6

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 de acceso).

Puede obtener la última imagen tomada de hacer 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 basa en el post: Deleting a gallery image after camera intent photo taken

+1

Oye, este código funciona en la pestaña de Samsung pero no funciona en las pestañas lenovo e i-ball, ¿hay alguna otra solución ????? – Shubham

1

puede utilizar como este 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); 
     } 
    } 
Cuestiones relacionadas