2011-12-27 109 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有你所需要的。