请教一个问题
我一个activity
打开了摄像头,并启动了预览,在onpause中调用了release摄像头后,再回到activity,在onresume中调用了重新打开摄像头及预览,预览就失效了,但其他代码还正常,跟踪代码,执行了surfaceCreated和surfaceChanged,里面有mCamera.startPreview();
解决方案
activity pause过后恢复我们以前是这样做的,Camera对象需要重新生成
在onPause的时候,调用如下方法(已经删除其他跟我们项目相关的逻辑代码)
/** * 停止显示相机画面</br> * 若设置了录制器,会自动关闭录制器 */public void stopPreview() { synchronized (mCameraLock) { if (mCamera != null) { mCamera.setPreviewCallback(null); mCamera.stopPreview(); mCamera.release(); mCamera = null; } }}
然后在onResume时,重新获得Camera对象(通过Camera.open()
),
再重新设置previewCallback,SurfaceHolder,Parameters等,最后startPreview
这里可以提醒一下LZ,
打开摄像头的时间可能会很长,勿在主线程直接打开,否则会有概率出ANR
摄像头根据设备的不同可能在打开时经常会抛各种异常,记得try,catch