2013-03-18 24 views
0

這裏是Android編程的新手。camera.setPreviewDisplay(SurfaceHolder)上的例外

我看了一下,發現這是一個常見問題,但我真的沒有看到一個簡單的解決方案...我試圖在Nexus 7上運行以下代碼(已嘗試AVD &物理設備),沒有任何運氣。它似乎是:

camera.setPreviewDisplay(SurfaceHolder); 

但我可能是錯的。這裏是當前的代碼:

public class MainActivity extends Activity implements SurfaceHolder.Callback{ 

Camera camera; 
SurfaceView surfaceView; 
SurfaceHolder surfaceHolder; 
boolean previewing = false;; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.cameralayout); 


     getWindow().setFormat(PixelFormat.UNKNOWN); 
     surfaceView = (SurfaceView)findViewById(R.id.surfaceview); 
     surfaceHolder = surfaceView.getHolder(); 
     surfaceHolder.addCallback(this); 

    } 

    public void onClick() { 
    // TODO Auto-generated method stub 
    if(!previewing){ 
    camera = Camera.open(); 
    if (camera != null){ 
     try { 
     camera.setPreviewDisplay(surfaceHolder); 
     camera.startPreview(); 
     previewing = true; 
     } catch (IOException e) { 
     e.printStackTrace(); 
     } 

    } 
    } 
    } 

任何想法的人?感謝您的幫助!

+1

發佈logcat的。 – 2013-03-18 03:05:50

+0

你可以發佈你的'SurfaceHolder.Callback'實現嗎? – Geros 2013-03-18 03:13:34

+0

它不再崩潰,但我在try/catch中放了一個toast來顯示錯誤,並且我得到java.lang.NullPointerException。不知道這是否有幫助...乾杯! – Losman90 2013-03-18 03:19:28

回答

1

android documentationCamera.open()

創建一個新的Camera對象訪問所述第一朝後相機上 該設備。如果設備沒有後置攝像頭,則此 將返回null。

它給你只有一個訪問背面攝像頭。

我想在Nexus 7

Camera.open()回報null運行下面的代碼,因爲的Nexus 7沒有後置攝像頭,只是一個前置攝像頭。

你可以試試這個方法

public Camera getCamera() 
{ 

    for(int i = 0; i < Camera.getNumberOfCameras(); i++) 
     return Camera.open(i); 

    return null; 
} 

申請,

camera = getCamera(); 
+1

我簡直不敢相信這就是全部。非常感謝 - 工作太棒了! – Losman90 2013-03-18 03:50:00