web-dev-qa-db-de.com

Abrufen von Pfad und Dateiname aus dem Ergebnis der Kameraabsicht

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?

17
bihcoder

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

6
Derzu

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

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.

0
Ovidiu Latcu