相机 -> 结果活动 -> 后按 -> 相机
Camera -> ActivityForResult -> BackPress -> Camera
我目前正在使用自定义相机,但是当我从图库中选择 select 图像并按下返回键然后继续拍照时,它在 mCamera 实例中的空指针处崩溃.
当我打开画廊时,我选择释放相机,这很有效。之后,当我按回键时,结果出现在 activity 中。从那里我手动调用创建相机所需的所有实例的方法。但是,当调用 mCamera.open 时,它给出了一个错误,我发现了。但是当我想拍照时它崩溃了,因为 mCamera 是空的。
我在这里做错了什么?我把相机放出来了,应该可以换新的了。
编辑:
发布:
Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, 100);
try {
mCamera.release();
Log.e("Camera", "Camera has been released");
} catch (NullPointerException E){
E.printStackTrace();
}
创建:
// Create an instance of Camera
mCamera = getCameraInstance();
// Create our Preview view and set it as the content of our activity.
mPreview = new CameraPreview(this, mCamera);
FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
preview.addView(mPreview);
正确答案:
http://www.whosebug.com/a/19312951/867591
谢谢艾哈迈德!
“没错,你已经在你的activity的onStart方法中打开你的相机,并在你的onStop方法中释放它。onResume和onPause方法是[=24]可见生命周期的一部分=] activity。当另一个 activity 占据整个可见的 space 时调用 OnStop。即使另一个 activity 不占据整个可见区域,也会调用 OnPause。整个可见 space,例如意图选择器对话框在弹出时所做的。所以我想将您的相机创建和释放移动到正确的生命周期方法中应该可以解决问题。您可以找到有关 activity 的更多信息生命周期在这里,但我相信你对此很熟悉:
http://developer.android.com/reference/android/app/Activity.html"
我做错了什么?我实际上在 onResume 中完成了所有创建工作,但是将其切换到 onStart 解决了这个问题。
确保您在 onCreate()
方法中调用 getCameraInstance()
方法,因为如果您在 onCreate()
方法之外调用它,相机将不会启用并且会给你一个空指针异常。
我认为这个link可以帮助你:
我目前正在使用自定义相机,但是当我从图库中选择 select 图像并按下返回键然后继续拍照时,它在 mCamera 实例中的空指针处崩溃.
当我打开画廊时,我选择释放相机,这很有效。之后,当我按回键时,结果出现在 activity 中。从那里我手动调用创建相机所需的所有实例的方法。但是,当调用 mCamera.open 时,它给出了一个错误,我发现了。但是当我想拍照时它崩溃了,因为 mCamera 是空的。
我在这里做错了什么?我把相机放出来了,应该可以换新的了。
编辑:
发布:
Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, 100);
try {
mCamera.release();
Log.e("Camera", "Camera has been released");
} catch (NullPointerException E){
E.printStackTrace();
}
创建:
// Create an instance of Camera
mCamera = getCameraInstance();
// Create our Preview view and set it as the content of our activity.
mPreview = new CameraPreview(this, mCamera);
FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
preview.addView(mPreview);
正确答案:
http://www.whosebug.com/a/19312951/867591
谢谢艾哈迈德!
“没错,你已经在你的activity的onStart方法中打开你的相机,并在你的onStop方法中释放它。onResume和onPause方法是[=24]可见生命周期的一部分=] activity。当另一个 activity 占据整个可见的 space 时调用 OnStop。即使另一个 activity 不占据整个可见区域,也会调用 OnPause。整个可见 space,例如意图选择器对话框在弹出时所做的。所以我想将您的相机创建和释放移动到正确的生命周期方法中应该可以解决问题。您可以找到有关 activity 的更多信息生命周期在这里,但我相信你对此很熟悉:
http://developer.android.com/reference/android/app/Activity.html"
我做错了什么?我实际上在 onResume 中完成了所有创建工作,但是将其切换到 onStart 解决了这个问题。
确保您在 onCreate()
方法中调用 getCameraInstance()
方法,因为如果您在 onCreate()
方法之外调用它,相机将不会启用并且会给你一个空指针异常。
我认为这个link可以帮助你: