Файл должен быть доступен для записи камерой, как указано Правин .
В моем случае я хотел сохранить файл во внутренней памяти. Я сделал это с:
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (i.resolveActivity(getPackageManager()!=null)){
try{
cacheFile = createTempFile("img",".jpg",getCacheDir());
cacheFile.setWritavle(true,false);
}catch(IOException e){}
if(cacheFile != null){
i.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(cacheFile));
startActivityForResult(i,REQUEST_IMAGE_CAPTURE);
}
}
Здесь cacheFile
- это глобальный файл, используемый для ссылки на записанный файл.
Тогда в методе результата возвращенное намерение является нулем.
Тогда метод обработки намерения выглядит так:
protected void onActivityResult(int requestCode,int resultCode,Intent data){
if(requestCode != RESULT_OK){
return;
}
if(requestCode == REQUEST_IMAGE_CAPTURE){
try{
File output = getImageFile();
if(output != null && cacheFile != null){
copyFile(cacheFile,output);
//Process image file stored at output
cacheFile.delete();
cacheFile=null;
}
}catch(IOException e){}
}
}
Здесь getImageFile()
- это служебный метод для присвоения имени и создания файла, в котором должно храниться изображение, а copyFile()
- это метод для копирования файла.