我做了一个项目,我在其中使用 android 相机 API。但是在像(Samsung galaxy S)这样的旧安卓手机上,我遇到了烦人的问题。当我尝试拍照时,我的应用程序卡住,几秒钟后出现 ANR 对话框。在我杀死我的程序后,相机仍然被阻止,我什至无法从系统相机应用程序使用它,只有手机重启帮助了我。
我收到的最后一条日志消息是:
QualcommCameraHardware(133): runframethread: waiting for preview thread to complete.
在新设备上一切正常,我该如何解决这个问题。
最佳答案
通常情况下,答案很简单。 浏览互联网一段时间后,我发现了发布最后一条日志消息的 native 代码:
//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.takePicture(null, null, null, pictureCallback);
之前手动调用 Camera.stopPreview();
和它有效。
更新
似乎带有 Camera.stopPreview();
的解决方案无法在具有新相机驱动程序的设备上运行,因为通常您无法在停止预览的情况下拍照。但是我没有使用 Camera.stopPreview();
,而是尝试使用 mCamera.setPreviewCallback(null);
简单地删除 onPreviewCallback
并且它适用于所有我用新旧相机驱动程序测试过的设备!!!
mCamera.setPreviewCallback(null);
camera.takePicture(null, null, null, pictureCallback);
关于Android 相机卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16585341/