【发布时间】:2020-02-20 14:47:40
【问题描述】:
我正在尝试使用 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()。
【问题讨论】:
-
你设法让它工作了吗?