摄像机&x27;Android 6的Nexus 5上的s预览已损坏

摄像机&x27;Android 6的Nexus 5上的s预览已损坏,android,camera,android-camera,Android,Camera,Android Camera,我们有一个支持camera2接口的大型摄像头应用程序。它在安卓5.1和其他版本上运行良好。但在Nexus5升级到Android 6之后,我们遇到了一个关键问题。 相机的预览是半可见的!Logcat中没有错误。更重要的是,静态图像的拍摄效果很好,即使是预览帧也很好,只有SurfaceView上的可见预览是经过剪裁的。 只有一件事是有帮助的-通过“主页”按钮重新启动。执行此操作后,如果运行应用程序,则可以看到整个预览。通过“后退”按钮关闭应用程序将再次中断预览 这是安卓M的一个已知问题: 它将在即

我们有一个支持camera2接口的大型摄像头应用程序。它在安卓5.1和其他版本上运行良好。但在Nexus5升级到Android 6之后,我们遇到了一个关键问题。 相机的预览是半可见的!Logcat中没有错误。更重要的是,静态图像的拍摄效果很好,即使是预览帧也很好,只有SurfaceView上的可见预览是经过剪裁的。 只有一件事是有帮助的-通过“主页”按钮重新启动。执行此操作后,如果运行应用程序,则可以看到整个预览。通过“后退”按钮关闭应用程序将再次中断预览


这是安卓M的一个已知问题:

它将在即将到来的更新中修复。在此之前,可能的解决办法是:

  • 连接到相机设备时始终创建新的曲面视图
  • 通过将曲面视图保持架设置为(0,0)或(1,1),然后在OnSurface更改后将其设置为所需的宽度和高度,强制曲面重新配置
  • 在B之后以及第二个OnSurfaceChanged回调被激发之后,才将曲面本身传递到摄影机框架
  • 如果应用程序未将方向锁定为纵向/横向,则在活动方向配置更改时重复步骤B

  • 这方面的测试用例会有所帮助——我很懒,自己也不想写;)很难发布一些示例代码,因为z应用程序非常大,摄像头管理代码也很大,我不知道是哪部分代码导致了这个问题((谢谢,Eddy!我已经在code.google页面上发布了对该解决方案的评论,让我在这里重复一下:我正在尝试实现2)根据logcat,我按照您的建议做得很好:1)在应用程序启动时将surfaceView大小重新配置为(1,1);2)onSurfaceChanged调用后,我启动了逻辑以配置所需的surfaceView大小。3) 在下一次onSurfaceChanged调用之后,我将surfaceView作为目标传递,以配置CameraCaptureSession的预览请求。结果:有时预览仍然被损坏。