camera.setPreviewDisplay(SurfaceHolder)上的例外情况

问题描述 投票:0回答:1

这里是Android编程的新手。

我已经浏览过并发现这是一个常见的问题,但我真的没有看到一个简单的修复...我试图在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();
      }

    }
    }
   }

有什么想法吗?谢谢您的帮助!

java android android-camera surfaceview
1个回答
1
投票

来自android documentation关于Camera.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();
© www.soinside.com 2019 - 2024. All rights reserved.