调用release()方法后无法使用Android相机进行恢复的异常。
调用release()方法后无法使用Android相机进行恢复的异常。
在开发相机应用时,我遇到了一个异常,只有当我切换到其他应用程序(我的应用程序的onPause()
方法)时才会出现。
我进行了一些研究,发现我需要添加以下代码作为Android相机堆栈的解决方法:mCamera.setPreviewCallback(null);
。
我的onPause()
方法现在看起来像这样:
@Override protected void onPause() { super.onPause(); try { // 在暂停事件发生时立即释放相机 //releaseCamera(); mCamera.stopPreview(); mCamera.setPreviewCallback(null); mCamera.release(); mCamera = null; } catch(Exception e) { e.printStackTrace(); } }
我的onResume()
方法:
@Override protected void onResume() { super.onResume(); try { mCamera.setPreviewCallback(null); mCamera = getCameraInstance(); //mCamera.setPreviewCallback(null); mPreview = new CameraPreview(Imageupload.this, mCamera);//设置预览 preview.addView(mPreview); } catch (Exception e){ Log.d(TAG, "Error starting camera preview: " + e.getMessage()); } } }
最后是我的getCameraInstance()
方法:
public Camera getCameraInstance(){ Camera camera = null; try { camera = Camera.open(); // 尝试获取相机实例 } catch (Exception e){ // 相机不可用(正在使用或不存在) } Camera.Parameters parameters = camera.getParameters(); // 根据设备屏幕设置预览大小 parameters.setPreviewSize(mPreviewSize.width, mPreviewSize.height); // 根据设备屏幕设置图片大小 parameters.setPictureSize(mPictureSize.width, mPictureSize.height); // 设置输出相机模式 parameters.setPictureFormat(PixelFormat.JPEG); // 设置焦点模式 parameters.setFocusMode(FOCUS_MODE_AUTO); // 设置闪光灯模式 parameters.setFlashMode("auto"); // 获取相机支持的最大和最小FPS Listfps = parameters.getSupportedPreviewFpsRange(); // 设置相机FPS parameters.setPreviewFpsRange(fps.get(fps.size()-1)[1], fps.get(fps.size()-1)[1]); // 设置相机参数 camera.setParameters(parameters); Toast.makeText(getApplicationContext(), "Your device are capable of previewing @" + fps.get(fps.size()-1)[1]/1000+"fps!",Toast.LENGTH_SHORT).show(); return camera; // 如果相机不可用,则返回null }
对于如何解决这个问题,有什么想法吗?