2011-12-27 108 views
3

我正在嘗試在我的Android應用程序上進行相機預覽。當我嘗試使用我的真實設備時,它會給我黑屏。相機預覽仍然是黑色

這是我的代碼,它不會拋出任何錯誤,但屏幕仍然是黑色的。有任何想法嗎?

import android.app.Activity; 
import android.content.Context; 
import android.graphics.PixelFormat; 
import android.hardware.Camera; 
import android.hardware.Camera.Parameters; 
import android.os.Bundle; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 
import android.widget.FrameLayout; 

public class ARrazerNav extends Activity{ 

public void onCreate(Bundle savedInstanceState){ 
    try{ 
     super.onCreate(savedInstanceState); 
     CustomCameraView cv = new CustomCameraView(this.getApplicationContext()); 
     FrameLayout r1 = new FrameLayout(this.getApplicationContext()); 
     setContentView(r1); 
     r1.addView(r1); 
    }catch (Exception e) { 
     // TODO: handle exception 
    } 
} 

public class CustomCameraView extends SurfaceView{ 
    Camera camera; 
    SurfaceHolder previewHolder; 
    public CustomCameraView(Context ctx){ 
     super(ctx); 
     previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
     previewHolder.addCallback(surfaceHolderListener); 
    } 
    SurfaceHolder.Callback surfaceHolderListener = new SurfaceHolder.Callback(){ 

     public void surfaceDestroyed(SurfaceHolder holder) { 
      // TODO Auto-generated method stub 
      camera.stopPreview(); 
      camera.release(); 
     } 

     public void surfaceCreated(SurfaceHolder holder) { 
      // TODO Auto-generated method stub 
      camera = Camera.open(); 
      try{ 
       camera.setPreviewDisplay(previewHolder); 
      }catch (Throwable th) { 
       // TODO: handle exception 
      } 
     } 

     public void surfaceChanged(SurfaceHolder holder, int format, int width, 
       int height) { 
      // TODO Auto-generated method stub 
      Parameters params = camera.getParameters(); 
      params.setPreviewSize(width, height); 
      params.setPictureFormat(PixelFormat.JPEG); 
      camera.setParameters(params); 
      camera.startPreview(); 

     } 
    }; 
} 

} 

有人可以給我一些解釋,爲什麼它給了我黑屏嗎?

回答

4

也許你正在受到android Camera bug這個bug的影響。

這裏提出的解決方法是Work around

我希望它有幫助..

+1

感謝daneel。我嘗試,這是工作。 – DevYudh 2011-12-27 06:55:43

8

也可參考此Link

你太早調用最後三行。在調用setPreviewDisplay()之前,您必須等待表面準備好,並且您必須在調用startPreview()之前等待surface的大小(surfaceChanged())。 This project有你所需要的。