java - 如何在 Android 应用程序内有效地重新启动拍照后的预览?

标签 java android camera

我正在尝试编写一个以专用间隔(例如延时摄影)拍摄照片的工具,但在第一次拍摄后很难让相机重置,以便它可以开始拍摄下一张照片。

以下是所使用的代码示例:

// gets called with the oncreate method and loads a preview fine
public void startUpPreview(){ 
    mCamera = getCameraInstance();
    mPreview = new CameraPreview(this, mCamera);
    FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
    preview.addView(mPreview);
}

// gets called from a later loop
public void getPicture() {
    mCamera.takePicture(null, null, mPicture);
    releaseCamera();
    startUpPreview();
}

使用上面的代码,它会抛出错误:

java.lang.RuntimeException:release()后调用的方法

我使用直接从 SDK 指南获取的发布代码,否则可以正常工作:

private void releaseCamera(){
    if (mCamera != null){
        mCamera.release();        
        mCamera = null;
    }
}

对于单张图片,通过 sleep 线程添加延迟使其起作用:

try {
        Thread.sleep(1000);
        releaseCamera();
        startUpPreview();
} catch(InterruptedException ex) {
        Thread.currentThread().interrupt();
}

但是当尝试拍摄多张照片时,此代码无法在循环内工作。我假设循环在所有照片拍摄 catch 之前就完成了。

预先感谢任何人可以提供的任何帮助。

最佳答案

takePicture() 启动捕获过程,并以(异步)调用 onPictureTaken() 回调结束。在结束之前你不应该释放相机。

因此,执行循环的伪代码如下所示:

onCLick() { // <-- start the loop
  count = 0;
  takePicture()
}

onPictureTaken() {
  savePicture(count);
  count++;
  if (count < maxCount) {
      mCamera.startPreview();
      mHandler.postDelayed(runTakePicture(), 1000);
  }
  else {
      releaseCamera();
  }
}

runTakePicture() {
   return new Runnable() {
      public void run() {
        mCamera.takePicture();
      }
   }
}

关于java - 如何在 Android 应用程序内有效地重新启动拍照后的预览?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24214362/

相关文章:

java - Spring Social OAuth 与 Facebook 共舞安全吗?

android - 如何禁用 Android View 中的任何事件?

java - 仅在用户输入时设置 Editview 观察者?

android - 从 android/linux 中的特定 PID 获取所有日志?

iphone - 翻译在 UIImagePickerController.cameraViewTransform 中不起作用

java - 了解 ArrayList 以及它们如何用于 TUI

java - 在使用 Iterator 循环时将项目添加到 HashMap

Java Web Launch 兑现第二个 JNLP 文件运行

iphone - 默认的 iPhone 相机应用程序如何能够如此快速地保存照片?

java - 如何在Android操作系统的手机上检索相机拍摄的照片?