Erhalten Sie Pfad des Bildes von ACTION_IMAGE_CAPTURE Intent
-
10-10-2019 - |
Frage
Hallo Ich verwende ACTION_IMAGE_CAPTURE
für die Aufnahme Bild mit Intent
wie folgt:
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 zum Speichern von Bild in einer SD-Karte und rufen Sie den Pfad des Bildes der onActivityResult
Methode. Ich weiß nicht, wie das Bild Pfad des aktuell aufgenommenen Bildes erhalten.
Wenn jemand weiß, bitte Hilfe.
Danke
Lösung
Dies ist, wie es auf 2.2 funktioniert (anders als bei früheren Versionen). Beim Start von Vorsatz
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);
Sie müssen mCapturedImageURI
erinnern.
Wenn Sie Bild aufzunehmen, in onActivityResult()
verwenden, den 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 deduce Bild / Video-URI von data.getData (), die von onActivityResult (..., Intent-Daten), wie schön beschrieben unter
Android ACTION_IMAGE_CAPTURE Intent
Da jedoch dieser Teil unterliegt Hersteller Anpassung ist, können Sie immer noch Telefone anzutreffen, wo „alte“ Ansatz nützlich sein kann.
Andere Tipps
Eine andere Art und Weise, auf Android 2.1 getestet, ist nehmen Sie die ID oder AbsolutePath der Galerie letztes Bild.
Es kann wie das getan werden:
/**
* 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) } );
}
wurde auf den Posten Dieser Code basiert: Löschen einer Galerie Bild nach der Kamera Absicht Foto genommen
Diese Frage ist sehr alt, aber ich habe für einen halben Tag mit dem gleichen Problem zu kämpfen worden. Das Problem ist, dass Ihre ACTION_IMAGE_CAPTURE
Absicht immer code=-1
und data=null
wird zurückkehren, 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 festlegen, die folgende, wenn Sie aus Ihrer Anwendung Audio aufnehmen möchten:
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
Entfernen
intent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI);
und Add
Uri uri = data.getData();in onActivityResult