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

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top