1

我做了一个项目,我在其中使用 android camera API。但是在像(三星 Galaxy S)这样的旧安卓手机上,我遇到了烦人的问题。当我尝试拍照时,我的应用程序冻结,几秒钟后出现 ANR 对话框。在我杀死我的程序相机后仍然被阻止,即使从系统相机应用程序我也无法使用它,只有手机重启对我有帮助。
我收到的最后一条日志消息是:

QualcommCameraHardware(133): runframethread: waiting for preview  thread to complete. 

在新设备上一切正常,我该如何解决这个问题。

4

1 回答 1

1

因为它通常是答案很简单。在浏览 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();而是尝试简单地删除它,它适用于我onPreviewCallbackmCamera.setPreviewCallback(null);新旧相机驱动程序测试过的所有设备!

mCamera.setPreviewCallback(null);
camera.takePicture(null, null, null, pictureCallback);
于 2013-05-16T10:44:39.910 回答