2009-06-26 52 views
4

可能重複:
Android Camera will not work. startPreview failsCamera.setPreviewDisplay()拋出異常

我想設置一個自定義的SurfaceView相機預覽但每次我執行的時候,我得到一個異常初始化方法。

下面是相機預覽初始化的代碼:

private void init(Context context) 
{ 
    setFocusable(true); 
    mRecording = false; 
    fileRW = new FileReaderWriter(); 
    frameCount = 0; 
    if(mCamera == null) 
    { 
     mCamera = Camera.open(); 
    } 
    Parameters parameters = mCamera.getParameters(); 
    parameters.setPictureFormat(PixelFormat.JPEG); 
    mCamera.setParameters(parameters); 
    try { 
     mCamera.setPreviewDisplay(surfaceHolder); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    mCamera.startPreview(); 

} 

mCamera.setPreviewDisplay(surfaceHolder);拋出異常(setPreviewDisplay failed)每個我嘗試執行該方法的時間。

有誰知道什麼可能是錯的?我非常感謝你的幫助。

謝謝!`

+0

不,喬納森,這不是一個重複的問題。一個是由於寬度/高度參數不正確,另一個是由於設置類型時API不一致造成的。 – Syndacate 2013-02-17 04:55:24

回答

2

最好的地方打電話setPreviewDisplay()surfaceChanged()如果剛創建的表面,surfaceChanged將至少調用一次,你可以startPreview()和setPreviewDisplay那裏。如果表面變化並且預覽已經開始,那麼您可以在那裏登錄stopPreview/setPreviewDisplay/startPreview。即使您的應用不改變表面的大小,當應用啓動或由於方向更改而退出時,框架仍可能意外地調用surfaceChanged()。所以你的應用程序確實需要正確處理surfaceChanged。您可以在Android中跟蹤攝像頭應用程序的源代碼以供參考。

如果surfaceChanged()僅在應用程序生命週期中被調用一次,則另一個答案中的代碼片段有效。

7

我跟喬恩明亮

我無法弄清楚發生了什麼事情一個星期完全同意,我忽略了的setType的表面支架,因爲SDK說,這是過時,即。

「此方法已過時,忽略此操作,此值在需要時自動設置。」

但是,如果你不這樣做,它會在setPreview上崩潰。這是在2.1版本的Galaxy S上運行1.5 SDK(我需要它向後兼容)。所以請確保你設置的類型。不像文檔聲音那麼自動。