我正在尝试使用CameraX和ZXing条形码扫描库实现条形码扫描器。
我编写了自定义分析器来解码条形码,这些条形码应该被处理(处理逻辑显然需要一些时间)。
因此,我想实时禁用图像分析,并在处理操作的结果不成功时再次启用它。
我的基本设置逻辑:
我编写了自定义分析器来解码条形码,这些条形码应该被处理(处理逻辑显然需要一些时间)。
因此,我想实时禁用图像分析,并在处理操作的结果不成功时再次启用它。
我的基本设置逻辑:
private fun setupCamera() {
processCameraProvider.unbindAll()
val camera = processCameraProvider.bindToLifecycle(
this,
CameraSelector.DEFAULT_BACK_CAMERA,
buildPreviewUseCase(),
buildImageAnalysisUseCase())
}
private fun buildPreviewUseCase(): Preview {
return Preview.Builder()
.setTargetRotation(cameraPreview.display.rotation)
.build()
.apply {
previewSurfaceProvider = cameraPreview.previewSurfaceProvider
}
}
private fun buildImageAnalysisUseCase(): ImageAnalysis {
return ImageAnalysis.Builder()
.setTargetRotation(cameraPreview.display.rotation)
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
.build()
.apply {
setAnalyzer(Executors.newSingleThreadExecutor(),
ZxingBarcodeAnalyzer { qrResult ->
Handler(Looper.getMainLooper()).post {
viewModel.handleBarcode(qrResult.text)
}
})
}
}
在查看库源代码后,我仍然不了解如何实现所需的行为?
如果我在 processCameraProvider
上调用 unbind(imageAnalysisUseCase object)
,我将无法再次绑定该对象(processCameraProvider
仅具有 bindToLifecycle()
方法,而没有 bind(imageAnalysisUseCase object)
方法)。
在 ImageAnalysis
上调用 clearAnalyzer()
将完全重置图像分析,尽管之后再调用 setAnalyzer()
。