0

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

    }
    }
   }

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

4

1 回答 1

1

android 文档中关于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();
于 2013-03-18T03:36:55.883 回答