2012-03-25 24 views
2

Ich möchte Hilfe beim Speichern von Bildern von meiner Kamera in einen bestimmten Ordner auf der SD-Karte. Meine Kamera öffnet sich, macht die Fotos und speichert sie; aber es speichert sie in den Standardordner. Der Code, den ich so haben ist für:Speichern von Fotos in einem bestimmten Ordner

public class Camera extends Activity { 
public static final int MEDIA_TYPE_IMAGE = 1; 
public static final int MEDIA_TYPE_VIDEO = 2; 
private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100; 
String Path; 
private Uri fileUri; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Bundle extras=getIntent().getExtras(); 
    Path= extras.getString("Path"); 
    Log.d("camear","path: "+Path); 
    //File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "MyCameraApp"); 

    Intent intent = new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA); 
     this.startActivity(intent); 
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
    //mediaFile = new File(mediaStorageDir.getPath() + File.separator +"IMG_"+ timeStamp + ".jpg"); 

    //fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); 
    Uri outputFileUri= Uri.fromFile(new File(Path+"/camera/"+timeStamp+".jpg"));// create a file to save the image 
    intent.putExtra("output", outputFileUri); // set the image file name 

    // start the image capture Intent 
    startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE); 

Der Weg über die Anwendung von einer anderen Aktivität kommt, und es gibt seine Werte in Ordnung. In der vorherigen Aktivität erstellt es die Ordner, in denen ich die Bilder speichern möchte.

Ich habe die folgende Antwort angeschaut und versucht, einige der Vorschläge zu implementieren: How to save images from Camera in Android to specific folder?. Eine Sache, die ich nicht versuchte, war der letzte Vorschlag zum OnActivityResult. Ist das der Schlüssel oder fehlt mir noch etwas? Diese Seite erwähnt hier den ContentResolver The Camera Intent is simply not working, eine Sache ist, dass beide Seiten so aussehen, als wollten sie das Gleiche machen, gehen aber auf unterschiedliche Weise vor.

+1

Paul, füge dieses 'intent.putExtra (MediaStore.EXTRA_OUTPUT, outputFileUri) hinzu;' –

+0

schlägst du vor, es zu der Datei hinzuzufügen oder die andere intent.putExtra, die ich bereits habe, zu ersetzen? Wenn ich versuche, etwas hinzuzufügen oder zu ersetzen, macht Still dasselbe. Mit meinem Debugger sehe ich, dass outputFileUri zeigt auf: file: /// mnt/sdcard/BucketMonkey/32rm215/Kamera. Ist es Standard, die letzte Datei der Kamera dem Pfad hinzuzufügen? Ich habe kein mkdir für den Pfad inklusive Kamera, würde das mein Problem verursachen? –

+0

Ich kann meinen vorherigen Post nicht bearbeiten, aber ignoriere meinen Kommentar über die Kamera am Ende, das war meine eigene Schuld. Aber selbst wenn der Pfad zu einem legitimen Ordner ist, wird er immer noch im Hauptkameraordner gespeichert. –

Antwort

1

Ich habe herausgefunden, was ich falsch gemacht habe. Wenn Sie sich den Code anschauen, habe ich zwei Fehler gemacht. Der erste Fehler war mit meinem Weg. Ich habe den korrekten Pfad von der vorherigen Aktivität erhalten, jedoch habe ich hier keinen Ordnerpfad erstellt. Dies ist der Code, der für mich gearbeitet:

File Folder=new File(Path); 
File picFile= new File(Folder.getPath()+"/"+timeStamp+".jpg"); 

Die erste Zeile überprüft für den Ordner, die zweite Zeile erstellt die Datei den Pfad zu dem Ordner verwenden. Ich hatte keinen Teil davon. Ohne den Weg zu finden, war es nur zu retten, wenn es wollte.

Ein anderes Problem, das ich mit meinem Intent-Aufruf hatte, verwendete ich: MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA. Dies ohne irgendwelche @Overrides funktioniert anscheinend wie die tatsächliche Kamera, die in seinem Ordner speichert. Ich änderte dies zu:
MediaStore.ACTION_IMAGE_CAPTURE, die mir ein wenig mehr Kontrolle erlaubt.

Ein weiteres Problem, das ich hatte und herausgefunden, war mit der ACTION_IMAGE_CAPTURE, würde es dauern und die Schlussfolgerung. Wenn Sie jedoch onActivityResult mit dem von der Kameraanwendung zurückgegebenen Ergebniscode implementieren, können Sie die Kamera entweder erneut anrufen und sie erneut ausführen lassen, oder Sie können sie schließen und zu einer anderen Aktivität zurückkehren. Es war nicht Teil der ursprünglichen Frage, aber es war ein Problem, das ich hatte.

+0

Können Sie die Lösung bitte posten? –

Verwandte Themen