我正在嘗試使用IMAGE_CAPTURE意圖拍照並立即在屏幕上顯示此照片。我做什麼:Android IMAGE_CAPTURE意圖在onActivityResult後保存照片
File photoFile = createImageFile();
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
startActivityForResult(intent, REQUEST_CAMERA);
創建映像文件的方法:
private File createImageFile() {
File dir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File photoFile = null;
try {
photoFile = File.createTempFile("photo", ".jpg", dir);
mPhotoPath = photoFile.getAbsolutePath();
} catch (IOException e) {
e.printStackTrace();
}
return photoFile;
}
當onActivityResult
叫我執行:
Bitmap photo = BitmapFactory.decodeFile(mPhotoPath);
mPhoto.setImageBitmap(photo);
這是一個問題。顯然IMAGE_CAPTURE活動將圖像保存到背景中的文件中,並且在圖像被保存之前,我的onActivityResult
被執行。因爲這個我的photo == null
。如果我在BitmapFactory.decodeFile
呼叫之前放置斷點,它也可以工作。我用一個醜陋的黑客修復它:
while (photo == null) {
photo = BitmapFactory.decodeFile(mPhotoPath);
}
所以,我做錯了什麼?爲什麼它以這種方式工作?
我對棉花糖的Nexus測試5.
使用'onSaveInstanceState()'和'onRestoreInstanceState'來保存文件路徑。請參閱此[SO答案](http://stackoverflow.com/a/32723550/3140227)。 –