【问题标题】:Exception on camera.setPreviewDisplay(SurfaceHolder)camera.setPreviewDisplay(SurfaceHolder) 上的异常
【发布时间】:2013-03-18 03:05:31
【问题描述】:

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

    }
    }
   }

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

【问题讨论】:

  • 你能发布你的SurfaceHolder.Callback实现吗?
  • 它不再崩溃,但我在 try/catch 中放了一个 toast 以显示错误,我得到了 java.lang.NullPointerException。不知道这是否有帮助...干杯!
  • @system32 这基本上是整个代码。我从另一个来源得到它。谢谢。
  • 您可以发布该解决方案并标记您自己的答案

标签: java android android-camera surfaceview


【解决方案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();

【讨论】:

  • 我不敢相信就是这样。非常感谢 - 效果很棒!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-26
  • 1970-01-01
相关资源
最近更新 更多