在从onOpened()
进行CameraDevice.StateCallback
回调之后,尝试创建捕获会话时遇到此CameraAccessException >>
首先是崩溃日志
Fatal Exception: android.hardware.camera2.CameraAccessException: CAMERA_ERROR (3): endConfigure:537: Camera 1: Error configuring streams: Broken pipe (-32) at android.hardware.camera2.CameraManager.throwAsPublicException(CameraManager.java:1127) at android.hardware.camera2.impl.ICameraDeviceUserWrapper.endConfigure(ICameraDeviceUserWrapper.java:117) at android.hardware.camera2.impl.CameraDeviceImpl.configureStreamsChecked(CameraDeviceImpl.java:481) at android.hardware.camera2.impl.CameraDeviceImpl.createCaptureSessionInternal(CameraDeviceImpl.java:669) at android.hardware.camera2.impl.CameraDeviceImpl.createCaptureSession(CameraDeviceImpl.java:517) at a.b.c.d.MainActivity.startCapturingSession(MainActivity.java:364) at a.b.c.d.MainActivity.access$startCapturingSession(MainActivity.java:36) at a.b.c.d.MainActivity$stateCallback$1.onOpened(MainActivity.java:90) at android.hardware.camera2.impl.CameraDeviceImpl$1.run(CameraDeviceImpl.java:150) at android.os.Handler.handleCallback(Handler.java:883) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loop(Looper.java:237) at android.os.HandlerThread.run(HandlerThread.java:67) Caused by android.os.ServiceSpecificException: endConfigure:537: Camera 1: Error configuring streams: Broken pipe (-32) at android.os.Parcel.createException(Parcel.java:2102) at android.os.Parcel.readException(Parcel.java:2056) at android.os.Parcel.readException(Parcel.java:2004) at android.hardware.camera2.ICameraDeviceUser$Stub$Proxy.endConfigure(ICameraDeviceUser.java:742) at android.hardware.camera2.impl.ICameraDeviceUserWrapper.endConfigure(ICameraDeviceUserWrapper.java:114) at android.hardware.camera2.impl.CameraDeviceImpl.configureStreamsChecked(CameraDeviceImpl.java:481) at android.hardware.camera2.impl.CameraDeviceImpl.createCaptureSessionInternal(CameraDeviceImpl.java:669) at android.hardware.camera2.impl.CameraDeviceImpl.createCaptureSession(CameraDeviceImpl.java:517) at a.b.c.d.MainActivity.startCapturingSession(MainActivity.java:364) at a.b.c.d.MainActivity.access$startCapturingSession(MainActivity.java:36) at a.b.c.d.MainActivity$stateCallback$1.onOpened(MainActivity.java:90) at android.hardware.camera2.impl.CameraDeviceImpl$1.run(CameraDeviceImpl.java:150) at android.os.Handler.handleCallback(Handler.java:883) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loop(Looper.java:237) at android.os.HandlerThread.run(HandlerThread.java:67)
Camera error doc表示相机处于错误状态。这可能是由于应用代码中的任何错误实现吗?
我的应用代码
private val stateCallback = object : CameraDevice.StateCallback() { override fun onOpened(camera: CameraDevice) { cameraDevice = camera startCapturingSession() } override fun onDisconnected(camera: CameraDevice) { cameraDevice = null camera.close() } override fun onError(camera: CameraDevice, error: Int) { onDisconnected(camera) } } @WorkerThread private fun startCapturingSession() { val prevSurface = previewSurface ?: kotlin.run { throw IllegalStateException("Preview Surface is null while starting capture session") } reader1 = ImageReader.newInstance( PREVIEW_WIDTH, PREVIEW_HEIGHT, ImageFormat.YUV_420_888, IMAGE_READER_MAX_IMAGES ) reader1!!.setOnImageAvailableListener(analyser, null) val surface1 = reader1!!.surface reader2 = ImageReader.newInstance( PREVIEW_WIDTH, PREVIEW_HEIGHT, ImageFormat.YUV_420_888, IMAGE_READER_MAX_IMAGES ) reader2!!.setOnImageAvailableListener(imageAvailableListener, null) val surface2 = reader2!!.surface val device = cameraDevice ?: throw IllegalStateException("Camera Device null while capturing session") device.createCaptureSession( // this is line 364 from the crash log listOf(surface1, surface2, prevSurface), object : CameraCaptureSession.StateCallback() { override fun onConfigureFailed(session: CameraCaptureSession) { } override fun onConfigured(session: CameraCaptureSession) { // more code here } }, null ) }
在最坏的情况下,我能抓到这个并关闭并重新拿回相机吗?
这种情况并非总是会发生,但是连续尝试打开应用程序失败。
我在从CameraDevice.StateCallback的onOpened()回调之后尝试创建捕获会话时遇到此CameraAccessException,首先是崩溃日志致命异常:android ....