Je sais que cela a déjà été répondu, mais je sais que beaucoup de gens ont trébuché à ce sujet, alors je vais ajouter un commentaire.
J'ai eu exactement le même problème sur mon Nexus One. Cela provenait du fichier qui n'existait pas sur le disque avant le démarrage de l'application appareil photo. Par conséquent, je me suis assuré que le fichier existait avant de démarrer l'application appareil photo. Voici un exemple de code que j'ai utilisé:
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();
}
Je crée d'abord un nom de fichier unique (un peu) en utilisant un hachage MD5 et je le mets dans le dossier approprié. Je vérifie ensuite s'il existe (ne devrait pas, mais c'est une bonne pratique de vérifier quand même). S'il n'existe pas, j'obtiens le répertoire parent (un dossier) et crée la hiérarchie des dossiers jusqu'à celui-ci (donc si les dossiers menant à l'emplacement du fichier n'existent pas, ils le seront après cette ligne. Ensuite, après cela Je crée le fichier Une fois le fichier créé, j'obtiens l'Uri et le passe à l'intention, puis le bouton OK fonctionne comme prévu et tout est doré.
Maintenant, lorsque le bouton OK est enfoncé sur l'application appareil photo, le fichier sera présent à l'emplacement donné. Dans cet exemple, ce serait /sdcard/Android/data/com.example.myapp/files/234asdioue23498ad.jpg
Il n'est pas nécessaire de copier le fichier dans le "onActivityResult" comme indiqué ci-dessus.