2011-12-27 4 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.

Обходное решение, которое предлагается здесь Work around.

Я надеюсь, что это поможет.

+1

спасибо daneel. Я стараюсь, и это работа. – DevYudh

8

см Также этот Link

Вы вызываете три последние строки слишком рано. Вы должны подождать, пока поверхность будет подготовлена ​​до вызова setPreviewDisplay(), и вы должны дождаться, когда поверхность будет иметь размер (surfaceChanged()), прежде чем вызывать startPreview(). This project имеет то, что вам нужно.

Смежные вопросы