Android 相机卡住

标签 android android-camera

我做了一个项目,我在其中使用 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/

相关文章:

相机拍摄的安卓照片尺寸非常小

Android setFocusArea 和自动对焦

android - 多次使用 camera.takePicture() 时只保存最后一张照片

java - 我需要使用随机操作设置 10 个随机表达式

android - 在 surfaceView 上绘制

Android 11 应用程序崩溃并出现 "The meta-data tag in your app' s AndroidManifest.xml 没有正确的值。预期为 12451000,但发现为 4323000"

java - Android Camera打开然后在新的activity中打开拍摄的图片

android - 如何减少从 SQLite 游标获取数据的时间?

android - 如何在 android 上进行多个同步语音识别调用?

android - 相机 FLASH_MODE_ON 不适用于 Moto X