直接打开前置摄像头是报错
Camera new cameraInitNormal:0
java.lang.RuntimeException: setParameters failed
但是打开直接后置摄像头并没有问题,而且从后置切到前置也没有问题。最后的解决办法
mHandler.postDelayed(new Runnable() { @Override public void run() { camera = CameraHelper.getDefaultFrontFacingCameraInstance(); try { camera.setPreviewDisplay(holder); camera.startPreview(); ispreview = true; } catch (Exception e) { e.printStackTrace(); } } }, 500);
通过handler.postdelayed的方式直接打开前置摄像头就没问题了,那么为什么药这样写呢,原因可能如下
打开线程与预览线程
onCreate()里会先后开启CameraOpenThread和CameraPreviewThread。
打开camera还需要线程?CameraOpenThread名为打开,实为C/S connect连接服务端,binder进程间通信,开销较大。预览线程必须在打开线程完成以后执行,它贯穿始终直到进程消亡为止,整个预览过程相对复 杂,在抽象层和底层驱动实现,概括讲,预览线程再开启两个线程,一个拿sensor的frame,一个送往framebuffer经 surfaceflinger显示出来。