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();
      }

    }
    }
   }


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

最佳答案

来自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();

09-05 13:46