Я знаю, что на этот вопрос уже отвечали, но я знаю, что многие люди запутались в этом, поэтому я собираюсь добавить комментарий.
У меня точно такая же проблема случилась на моем Nexus One. Это было из файла, не существующего на диске до запуска приложения камеры. Поэтому я позаботился о том, чтобы файл существовал до запуска приложения камеры. Вот пример кода, который я использовал:
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();
}
Сначала я создаю уникальное (несколько) имя файла, используя хэш MD5, и помещаю его в соответствующую папку. Затем я проверяю, существует ли он (не должен, но в любом случае рекомендуется проверять). Если он не существует, я получаю родительский каталог (папку) и создаю иерархию папок до него (поэтому, если папки, ведущие к месту расположения файла, не существуют, они будут после этой строки. Затем после этого Я создаю файл. Как только файл создан, я получаю Uri и передаю его намерению, а затем кнопка ОК работает, как и ожидалось, и все это золотой.
Теперь, когда в приложении камеры нажата кнопка «ОК», файл будет находиться в указанном месте. В этом примере это будет /sdcard/Android/data/com.example.myapp/files/234asdioue23498ad.jpg
Нет необходимости копировать файл в «onActivityResult», как указано выше.