我正在尝试打开相机并设置应保存相机图片的路径,如下所示:
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(this.mFileImgPath))
我遇到的问题是,如果我在相机处于纵向模式时拍摄照片,那么'onActivityResult'将被正常调用,当我检查'mFileImgPath'时,它将不为空。但是,当我使用相同的代码并拍照时 在横向模式下,将调用'onActivityResult'但总是'mFileImgPath'为空。
进一步调用,我使用调试器,如果我试图在Lanscape模式下拍照,'mFileImgPath'总是为空。请看一下调试器的屏幕截图
请让我知道为什么'mFileImgPath'在横向模式下始终为空?以及如何实现它
码
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
this.mFileImgPath = new File(App.instance.getOutDir() + "/" + new Date().getTime());
Log.e(TAG, "mFileImgPath" + mFileImgPath);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(this.mFileImgPath));
调试器
如屏幕截图所示,'mFileImgPath'为空,当我点击 steo over 时,调试器会跳过if条件
答案 0 :(得分:1)
使用内置相机时,这是一个已知问题。为了解决这个问题,你必须通过 onSaveInstanceState()和 onRestoreInstanceState()来保留uri。
在宣布 startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE)
之前,请声明 intent.putExtra(..)以便:
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE);
现在将这两种方法放在您的活动中
/* Storing the file url as it'll be null after returning from camera app */
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// save file url in bundle as it will be null on scren orientation changes
outState.putParcelable("file_uri", fileUri);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// get the file url
fileUri = savedInstanceState.getParcelable("file_uri");
}
请勿尝试访问Intent
中的 onActivityResult(int requestCode, int resultCode, Intent data)
,参数data
最有可能为空。
答案 1 :(得分:0)
相机应用程序启动时,您的活动可能会被杀死。任何时候都不会被Android杀死。
你应该@over onSaveInstanceState并保存路径变量的值。然后检索onRestoreInstanceState中的值。