2011-06-01 107 views
1

我創建了具有增強現實功能的活動。其中的一部分是在背景中顯示手機相機(這是Activity視圖中的SurfaceView)。如何在SurfaceView上繪圖時正確鎖定/解鎖相機?

在活動

onCreate()方法我做的:

surfaceHolder = surfaceView.getHolder(); 
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
surfaceHolder.addCallback(this); 

我的回調是:

@Override 
public void surfaceCreated(SurfaceHolder holder) { 

    try { 
     camera = Camera.open(); 
     camera.setDisplayOrientation(90); 
     camera.setPreviewDisplay(holder); 
    } catch (Exception e) { 
     // e.printStackTrace(); 
    } 
} 

@Override 
public void surfaceChanged(SurfaceHolder holder, int format, int width, 
     int height) { 
    camera.startPreview(); 
} 

@Override 
public void surfaceDestroyed(SurfaceHolder holder) { 
    camera.stopPreview(); 
    camera.release(); 
} 

現在,當我關閉我的應用程序(在後臺離開它)相機的應用程序是不是因爲相機仍然鎖定在我的應用程序內。

我應該如何實現onResume()onPause()方法以鎖定/解鎖相機?

同時讓應用程序鎖定在應用程序佔用大約5%的CPU在Galaxy S上,並且在我回到我的應用程序後 - 它嘗試camera.startPreview()時崩潰在surfaceChanged()。

幫助!

+1

解決。謝謝你沒有注意並讓它自己做。 – Kostas 2011-06-01 14:23:22

+1

不客氣!我愛不注意。 – Nallath 2011-06-01 14:25:19

+2

您應該發佈您的解決方案來幫助任何未來的開發人員解決此問題。 – 2011-06-01 15:36:09

回答

0

只需添加這樣的事情surfaceCreated回調:

if (camera != null) { 
     camera.release(); 
    } 
    camera = Camera.open(); 
    camera.setDisplayOrientation(90); 
    try { 
     camera.setPreviewDisplay(holder); 
    } catch (Exception e) { 
    } 

然後裏面的onPause()加釋放和調用回調:

camera.release(); 
    surfaceCreated(surfaceHolder); 

現在,它就像一個魅力!乾杯!

+0

顯然,每次我關閉應用程序並將其保留在背景中時,表面都會被破壞。所以下次我重新打開它時,我需要再次創建曲面並開始在其上繪製相機輸出。希望能幫助到你! – Kostas 2011-06-02 14:31:02