Java 在Android应用程序中拍照后,如何有效地重新启动预览?
我正在尝试编写一个工具,以指定的时间间隔(如timelapse)拍摄照片,但在第一次拍摄后很难让相机复位,以便可以在下一张照片上开始拍摄 以下是所用代码的示例:Java 在Android应用程序中拍照后,如何有效地重新启动预览?,java,android,camera,Java,Android,Camera,我正在尝试编写一个工具,以指定的时间间隔(如timelapse)拍摄照片,但在第一次拍摄后很难让相机复位,以便可以在下一张照片上开始拍摄 以下是所用代码的示例: // gets called with the oncreate method and loads a preview fine public void startUpPreview(){ mCamera = getCameraInstance(); mPreview = new CameraPreview(this,
// 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;
}
}
对于单个图片,使用休眠线程添加延迟可以使其正常工作:
try {
Thread.sleep(1000);
releaseCamera();
startUpPreview();
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
但当尝试拍摄多张照片时,此代码在循环中不起作用。我假设在所有的照片拍摄都能赶上之前,这个循环已经完成了
提前感谢任何人提供的任何帮助。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();
}
}
}
onCLick(){/@user1992200每次OP请求延迟1秒。但我的实验表明,虽然一些设备,例如三星S4,显然可以在零延迟下工作,但其他设备,例如OnePlus 1,如果拍摄未延迟至少100毫秒,则会失败