因为它通常是答案很简单。在浏览 Internet 一段时间后,我发现了发布最后一条日志消息的本机代码:
//waiting for preview thread to complete before clearing of the buffers
mPreviewThreadWaitLock.lock();
while (mPreviewThreadRunning) {
LOGI("runframethread: waiting for preview thread to complete.");
mPreviewThreadWait.wait(mPreviewThreadWaitLock);
LOGI("initPreview: old preview thread completed.");
}
mPreviewThreadWaitLock.unlock();
根据此代码,我尝试Camera.stopPreview();
在每次调用之前手动调用camera.takePicture(null, null, null, pictureCallback);
它并且它可以工作。
更新
似乎该解决方案Camera.stopPreview();
不适用于具有新相机驱动程序的设备,因为通常您无法在停止预览的情况下拍照。但是我没有使用,Camera.stopPreview();
而是尝试简单地删除它,它适用于我onPreviewCallback
用mCamera.setPreviewCallback(null);
新旧相机驱动程序测试过的所有设备!
mCamera.setPreviewCallback(null);
camera.takePicture(null, null, null, pictureCallback);