Ich weiß, dass dies bereits beantwortet wurde, aber ich weiß, dass viele Leute darüber gestolpert sind, deshalb werde ich einen Kommentar hinzufügen.
Ich hatte genau das gleiche Problem auf meinem Nexus One. Dies war aus der Datei, die vor dem Start der Kamera-App nicht auf der Festplatte vorhanden war. Daher habe ich sichergestellt, dass die Datei, die vor dem Start der Kamera-App vorhanden war. Hier ist ein Beispielcode, den ich verwendet habe:
String storageState = Environment.getExternalStorageState();
if(storageState.equals(Environment.MEDIA_MOUNTED)) {
String path = Environment.getExternalStorageDirectory().getName() + File.separatorChar + "Android/data/" + MainActivity.this.getPackageName() + "/files/" + md5(upc) + ".jpg";
_photoFile = new File(path);
try {
if(_photoFile.exists() == false) {
_photoFile.getParentFile().mkdirs();
_photoFile.createNewFile();
}
} catch (IOException e) {
Log.e(TAG, "Could not create file.", e);
}
Log.i(TAG, path);
_fileUri = Uri.fromFile(_photoFile);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE );
intent.putExtra( MediaStore.EXTRA_OUTPUT, _fileUri);
startActivityForResult(intent, TAKE_PICTURE);
} else {
new AlertDialog.Builder(MainActivity.this)
.setMessage("External Storeage (SD Card) is required.\n\nCurrent state: " + storageState)
.setCancelable(true).create().show();
}
Ich erstelle zuerst einen eindeutigen (etwas) Dateinamen mit einem MD5-Hash und lege ihn in den entsprechenden Ordner. Ich überprüfe dann, ob es existiert (sollte nicht, aber es ist eine gute Praxis, es trotzdem zu überprüfen). Wenn es nicht existiert, erhalte ich das übergeordnete Verzeichnis (einen Ordner) und erstelle die Ordnerhierarchie bis dahin (wenn also die Ordner, die zum Speicherort der Datei führen, nicht existieren, werden sie nach dieser Zeile angezeigt. Danach Ich erstelle die Datei. Sobald die Datei erstellt ist, erhalte ich den Uri und übergebe ihn an die Absicht. Dann funktioniert die Schaltfläche OK wie erwartet und alles ist golden.
Wenn Sie nun in der Kamera-App auf die Schaltfläche OK klicken, befindet sich die Datei am angegebenen Speicherort. In diesem Beispiel wäre dies /sdcard/Android/data/com.example.myapp/files/234asdioue23498ad.jpg
Es ist nicht erforderlich, die Datei in das oben angegebene "onActivityResult" zu kopieren.