2011-10-03 6 views
16

Desidero creare un'immagine con l'intento della fotocamera e salvarla nella cartella DCIM predefinita. Quindi voglio ottenere il percorso/nome del file in cui è memorizzata l'immagine.Ottieni percorso e nome file dalla telecamera Risultato intento

sto provando con il seguente codice:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(intent, TAKE_PICTURE); 

Con questo codice, la fotocamera si apre e dopo ho preso una foto si chiude e salva l'immagine nella cartella di immagine di default (di solito/DCIM/fotocamera o sdcard/dcim/fotocamera ...)

ma come posso ottenere il percorso e il nome del file della foto scattata ora? Ho provato quasi tutto nel onActivityResult ho provato

String result = data.getData(); 

e

String result = data.getDataString(); 

e

String result = data.toURI(); 

e

Uri uri = data.getData(); 

e tc

Ho ricercato gli ultimi due giorni per trovare una soluzione per questo, ci sono molti articoli sul web e sullo stackoverflow ma niente funziona. Non voglio una miniatura, voglio solo il percorso (uri?) Per l'immagine che la fotocamera ha scattato.

Grazie per tutto l'aiuto

EDIT: Quando provo:

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

non memorizza l'immagine come test.jpg ma con il normale nome dell'immagine 2011-10-03 .. ... jpg (ma va bene anche io, ho solo bisogno del percorso per l'immagine, non importa quale sia il nome).

migliori saluti

modificare nuovamente

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

Quando provo questo, memorizza l'immagine nella cartella giusta e con il nome dato (ad esempio test111111.jpg). Ma come posso ottenere ora il percorso file in onActivityResult?

+6

si allready conosci il percorso ... da quando hai creato il tuo file. puoi mantenere il file o il percorso come variabile membro della tua attività. –

risposta

1

Quando si avvia lo ACTION_IMAGE_CAPTURE è possibile passare uno MediaStore.EXTRA_OUTPUT aggiuntivo come URI del file in cui si desidera salvare l'immagine.

Ecco un semplice esempio:

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: Ho appena provato sul mio dispositivo e file.createNewFile() risolto il problema per me.

+0

Ciao, grazie per la tua risposta veloce, ma non funziona come previsto. Spiegherò sopra. – bihcoder

+0

Ho risposto sopra con il codice. – bihcoder

+0

una domanda sciocca forse ... hai aggiunto il permesso nel Manifesto? android.permission.CAMERA? sì..it può funzionare senza autorizzazione alcune volte –

6

L'immagine verrà archiviata due volte, prima nella cartella della galleria e successivamente nel file specificato nel metodo putExtra (MediaStore.EXTRA_OUTPUT, path).

È possibile ottenere l'ultima foto scattata farlo:

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

Questo campione è stato basato su post: Deleting a gallery image after camera intent photo taken

+1

Ehi, questo codice funziona sulla scheda Samsung ma non funziona sulla scheda lenovo e i-ball, c'è qualche altra soluzione ????? – Shubham

1

è possibile utilizzare come questo in 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); 
     } 
    }