2011-11-12 67 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