首页 > 开发 > Android > 正文

关于android的activity中camera预览问题,涉及activity生命周期

2017-09-08 15:24:08  来源:网友分享

请教一个问题

我一个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