Ich möchte mit der Kameraabsicht ein Bild machen und es im Standard-DCIM-Ordner speichern. Dann möchte ich den Pfad/Dateinamen erhalten, in dem das Bild gespeichert ist.
Ich versuche es mit dem folgenden Code:
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, TAKE_PICTURE);
Mit diesem Code wird die Kamera geöffnet, und nachdem ich ein Bild aufgenommen habe, wird das Bild geschlossen und im Standardbildordner gespeichert (normalerweise/dcim/camera oder sdcard/dcim/camera ...).
aber wie kann ich jetzt den Pfad und den Dateinamen des aufgenommenen Bildes ermitteln? Ich habe fast alles in onActivityResult
ausprobiert, was ich ausprobiert habe
String result = data.getData();
und
String result = data.getDataString();
und
String result = data.toURI();
und
Uri uri = data.getData();
usw.
Ich habe die letzten zwei Tage nachgeforscht, um eine Lösung dafür zu finden. Es gibt viele Artikel im Web und über Stackoverflow, aber nichts funktioniert. Ich möchte kein Vorschaubild, sondern nur den Pfad (uri?) Zu dem Bild, das die Kamera aufgenommen hat.
Vielen Dank für jede Hilfe
EDIT: Wenn ich versuche:
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);
es speichert das Bild nicht als test.jpg sondern mit dem normalen Bildnamen 03.10.2011 ..... jpg (aber das ist auch in Ordnung, ich brauche nur den Pfad zum Bild, egal wie der Name ist ist).
Freundliche Grüße
Erneut BEARBEITEN
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);
Wenn ich das versuche, speichert es das Bild im richtigen Ordner und mit dem angegebenen Namen (z. B. test111111.jpg). Aber wie kann ich den Dateipfad jetzt in onActivityResult abrufen?
Das Bild wird zweimal gespeichert, zuerst im Galerieordner und dann in der Datei, die Sie mit der Methode putExtra (MediaStore.EXTRA_OUTPUT, Pfad) angegeben haben.
Das zuletzt aufgenommene Bild erhalten Sie so:
/**
* 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;
}
}
Dieses Beispiel basiert auf dem Beitrag: Löschen eines Galeriebildes nach einer Kameraabsichtsaufnahme
sie können so in onActivityResult () verwenden
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);
}
}
Wenn Sie den ACTION_IMAGE_CAPTURE
starten, können Sie einen zusätzlichen MediaStore.EXTRA_OUTPUT
als URI
der Datei übergeben, in der Sie das Bild speichern möchten.
Hier ist ein einfaches Beispiel:
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);
BEARBEITEN: Ich habe gerade mein Gerät ausprobiert und file.createNewFile()
hat das Problem für mich gelöst.