2010-11-15 5 views
23

Hallo, ich bin mit ACTION_IMAGE_CAPTURE Bild für die Erfassung mit Intent wie folgt:Get Path of Bild von ACTION_IMAGE_CAPTURE Intent

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

Ich brauche zu speichern Bild in einer SD-Karte und rufen Sie den Pfad des Bildes mit der onActivityResult Methode. Ich weiß nicht, wie ich den Bildpfad des aktuell aufgenommenen Bildes erhalten soll.

Wenn jemand weiß, bitte helfen.

Dank

+2

bitte alle Ihrer Codes innerhalb der „Code“ Textfelder setzen, macht es Ihren Code wesentlich einfacher zu lesen, so als wir in der Lage sein können, Ihre Fragen zu beantworten – Samuel

Antwort

49

Dies ist, wie es auf 2,2 (anders als bei früheren Versionen) funktioniert. Beim Starten der Absicht

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

müssen Sie sich erinnern mCapturedImageURI.

Wenn Sie Bild aufzunehmen, in onActivityResult() verwenden, die URI-Dateipfad zu erhalten:

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

UPDATE: auf neue Android-Geräte würden Sie nicht MediaStore.EXTRA_OUTPUT brauchen, aber Sie eher ableiten Bild/Video-URI von data.getData(), empfangen von onActivityResult (..., Intent-Daten), wie sie unter gut

Android ACTION_IMAGE_CAPTURE Intent beschrieben

da jedoch dieser Teil unterliegt der Herstelleranpassung, können Sie immer noch auf Telefone stoßen, bei denen "alte" Herangehensweise nützlich sein kann.

+1

Ihnen dafür dankt, aber funktioniert nicht auf Samsung Galaxy Ich oder II.Miniaturansicht auf HTC Incredible :-( –

+0

Nach der Aufnahme der Foto-Aktivität wird neu geladen und beim Starten meiner Anwendung zeigt es "Warten auf Debugging ....". Ist alles, was ich verpasst. Überprüfen Sie den Code hier: http: // stackoverflow. com/questions/10510547/android-display-captured-image-in-img-tag – Ponmalar

+0

Von onActivityResult() können Sie erhalten, was war der echte Name auf der SD-Karte. capturedImageFilePath hat es. – Zelimir

7

Eine andere Methode, getestet auf Android 2.1, ist die ID oder AbsolutePath des letzten Bildes der Galerie.

Es kann so geschehen:

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

Und die Datei zu entfernen:

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

Dieser Code wurde auf der Post basiert: Deleting a gallery image after camera intent photo taken

+0

danke für Ihre helfende Antwort! – michoprogrammer

2

Diese Frage ist sehr alt, aber Ich habe einen halben Tag mit dem gleichen Problem gekämpft. Das Problem ist, dass Ihre ACTION_IMAGE_CAPTURE Absicht immer code=-1 zurückkehren und data=null, wenn Sie die folgenden Berechtigungen für die Anwendung in Ihrer AndroidManifest.xml-Datei festgelegt:

<uses-permission android:name="android.permission.CAMERA"/> 

Sie können auch die folgenden einstellen, wenn Sie aus Ihrer Anwendung Audio aufnehmen möchten:

<uses-permission android:name="android.permission.RECORD_AUDIO"/> 
+1

Nach Einstellung der Berechtigung gibt es code = -1 und data = null auf Nexus 4 –

1

entfernen

intent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI); 

und fügen

Uri uri = data.getData();in onActivityResult 
Verwandte Themen