安卓相机拍完一张照片后会冻结

17

我正在做一个与相机相关的项目,在拍照后,相机会冻结,您必须完成该活动并重新调用它以拍摄另一张照片。如何使拍照仅冻结1-2秒钟,然后使用SurfaceView再次打开相机呢?对于视频也是同样的问题,我正在使用MediaRecorder,录制视频按停止按钮保存视频,屏幕仍然处于活动状态,但我无法再次录制视频,必须重启该活动。

有人有解决方法吗?


@subspider 你是在使用 Galaxy S 检查相机功能吗? - includeMe
同样的问题在这里。@dsc 是的,我正在使用 Galaxy S。 - stoefln
6个回答

59
我为此找到了一个解决方案:拍照后,预览显示将停止。要继续拍照,请首先再次调用camera.startPreview()

2
刚开始预览对我没用。然而,根据下面的答案所述,停止并重新开始预览有效。 - shshnk
嘿,即使我首先调用了startPreview(),相机也无法打开。如果你能帮我解决问题,我将不胜感激!https://stackoverflow.com/questions/47483990/can-only-open-camera-once - Ruchir Baronia

17

拍摄照片后,您应该停止预览并重新启动预览。

mCamera.stopPreview();
mCamera.startPreview();

它将正常运行。


即使我这样做了,相机仍然无法打开。如果你能帮我解决问题,我将不胜感激!https://stackoverflow.com/questions/47483990/can-only-open-camera-once - Ruchir Baronia

3
在后台使用AsyncTask进行任何图像处理。这将允许您的UI活动继续并拍摄另一张照片。
编辑:我无法删除已接受的答案,因此请参见stoefin下面的答案。在拍下下一张照片之前调用camera.startPreview()对他有效。

3
相机冻结的原因不是因为stoefln的答案有误,他的回答是正确的;需要重新启动预览。 - elijah

2

对于我的情况,camera.startpreview(); 的方法并没有起作用,但下面的代码解决了这个问题,希望能对其他人有所帮助。我使用了一个线程,在拍照后延迟关闭和打开相机 500ms。

 private void start_camera() {
     try {
         camera = Camera.open();
         // camera.lock();
     } catch (RuntimeException e) {
         Log.e(tag, "init_camera: " + e);
         return;
     }
     Camera.Parameters param = camera.getParameters();
     param = camera.getParameters();
     Camera.Size size = param.getSupportedPreviewSizes().get(0);
     param.setPreviewSize(size.width, size.height);
     camera.setParameters(param);
     try {
         camera.setPreviewDisplay(surfaceHolder);
         camera.startPreview();
         previewRunning = true;
     } catch (Exception e) {
         Log.e(tag, "init_camera: " + e);
         return;
     }}
 private void captureImage() {
     camera.takePicture(shutterCallback,null,jpegCallback);
     Thread restart_preview=new Thread(){public void run(){
         try {
             Thread.sleep(500);
         } catch (InterruptedException e) {
             e.printStackTrace();
         }

         camera.release();
         camera=null;
         start_camera();
     }};
     restart_preview.start();}

0

0
相机卡住了,因为您没有重新启动相机的预览,所以请通过调用camera.startpreview()来重新启动它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接