2012-11-15 6 views
8

Ich möchte ein Bild von der Kamera aufnehmen und im Cache-Verzeichnis der privaten Anwendung speichern. Mir ist klar, dass ich der Kamera-App die Erlaubnis geben muss, in mein privates Verzeichnis zu schreiben, also habe ich die FLAG_GRANT_WRITE_URI_PERMISSION-Flagge hinzugefügt.Bild von der Kamera in das Cache-Verzeichnis der privaten Anwendung speichern

Was passiert ist, dass die Kamera App öffnet, kann ich das Bild machen, aber wenn ich auf die OK-Taste klicke, passiert nichts. Die Kamera-App bleibt geöffnet. Keine Protokollausgabe Ich vermute es liegt an einem Berechtigungsproblem.

private void getCameraImage() { 
    try { 
     mTmpFile = File.createTempFile("tmp", ".jpg", getCacheDir()); 
     Uri imgUri = Uri.fromFile(mTmpFile); 
     Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     i.putExtra(MediaStore.EXTRA_OUTPUT, imgUri); 
     i.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 
     // i.setData(imgUri); // if uncommented, i get an ActivityNotFound Exception 
     startActivityForResult(i, REQUEST_CAMERA); 
    } catch (IOException e) { 
     Log.e(TAG, "getCameraImage()", e); 
     Toast.makeText(this, "Something went wrong", Toast.LENGTH_SHORT).show(); 
    } 
} 

Irgendwelche Erkenntnisse, wie ich das korrigieren könnte?

Edit:

Wenn ich das Verzeichnis der Öffentlichkeit SD-Karte zu ändern, dann funktioniert es gut.

mTmpFile = File.createTempFile("tmp", ".jpg", Environment.getExternalStorageDirectory()); 

Dank Simon

+1

Wenn es sich um ein Berechtigungsproblem handelt, wird im LogCat ein Fehler angezeigt. – PearsonArtPhoto

+0

Ich bin mir nicht sicher. Selbst wenn ich das Flag FLAG_GRANT_WRITE_URI_PERMISSION entferne, erhalte ich keine Protokollausgabe. Vielleicht überprüft die Kamera-App die Berechtigung und bricht die Aktion ab, wenn sie die Datei nicht schreiben kann. – SimonSays

Antwort

2

Statt den Uri der vorbei um das Bild zu speichern Sie http://developer.android.com/reference/android/hardware/Camera.html#takePicture(android.hardware.Camera.ShutterCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera verwenden können. PictureCallback)

und den Inhalt in Ihrem App-Speicher abrufen. Von dort aus können Sie alles tun, was Sie wollen.

Vergessen Sie nicht, dass Kameraanwendungen auch die Galerie verwenden und die Galerie-App Ihr ​​privates Verzeichnis nicht überprüfen darf.

+0

Nun, das ist eine ganz andere Art, das Bild zu bekommen als das, was ich vorhatte. Es ist eigentlich keine Antwort auf die ursprüngliche Frage, aber könnte das Problem noch lösen. Da ich nicht mehr an dieser App arbeite und daher die Lösung nicht testen kann, werde ich einfach weitermachen und die Antwort akzeptieren - es ist sowieso die einzige Antwort :-) – SimonSays

+0

Vielen Dank für die Wertschätzung und ja, nicht direkt Beantworten Sie Ihre Frage, aber wie Sie sagten, ist die einzige Möglichkeit, etwas zu tun, das nur Ihrer App "gehört" und keinem anderen, der Medien verwendet. Ich habe diese Methode selbst benutzt ... Danke – danysz

+0

Diese Lösung wurde in API 21 nicht weiter unterstützt –

Verwandte Themen