2011-11-12 68 views
0

我已经写了一个视频通话应用程序,其中的活动有成员变量 private CameraMediaSource mCameraMediaSource;Android摄像头开启/关闭

工作正常,但过了一段时间有时相机不再显示。然后我杀了整个应用程序,它再次运作。不知道如何在onPause(),onResume()等活动生命周期方法中处理相机。是否需要释放某些时间点的cameera?当画面停留在屏幕上时,如何清除相机。谢谢

+0

你应该真的接受更多的答案;提供的那个在我的经验中运作得非常好。 – Greyson

回答

3

是的,相机应该被释放。在OnDestroy中最小化,但在OnPause中可能更安全。

该为我跨越1.6工作使用相机的生命周期 - 3.x的是:

onResume: 
    - get a ref to camera with Camera.open(); 
    - sv = (SurfaceView)this.findViewById(R.id.capture_SurfaceView); 
       mHolder = sv.getHolder(); 
       mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
       mHolder.setSizeFromLayout(); 
       mHolder.addCallback(this); 
    surfaceChanged: 
    - Camera.setPreviewDisplayHolder() 
    - Camera.startPreview() 
    onPause: 
    - Camera.stopPreview 
    - SurfaceHolder.removeCallback() 
    - Camera.release() 

这很适合我整个设备入门关闭,然后再打开,或我的应用程序,否则会背景。

另外,请注意未捕获的异常,这可能会导致您无法释放相机。这通常会导致相机硬件锁定,以致杀死并重新启动应用程序仍然无法打开相机。如果发生这种情况,您需要关闭设备电源。

+0

好的。什么是surfaceChanged? – Androider

+0

SurfaceChanged是SurfaceHolder.Callback接口的一部分。它用于让您知道何时可以绘制表面视图。请参阅:http://developer.android.com/reference/android/view/SurfaceHolder.Callback.html – mmeyer