android ML试剂盒条形码扫描仪在首次检测到时未停止

zsbz8rwp  于 2023-04-04  发布在  Android
关注(0)|答案(2)|浏览(113)

我想得到两个值 从cameraX和ML Kit使用条形码扫描仪(rawValue和格式),但我不能停止扫描,并插入数据到房间时,第一个被检测到。我的代码插入房间尽可能多的元素,因为在这个过程中检测到许多条形码(相同的条形码多次)
这是我在processImageProxy函数中的addOnSuccessListener:

scanner.process(inputImage).addOnSuccessListener { barcodeList ->
                processBarcode(barcodeList)
            }

这是我保存数据的实际方法:

private fun processBarcode(barcodeList: List<Barcode>) {
        if (barcodeList.isNotEmpty()) {
            with (barcodeList.first()) {

                activityCameraScannerViewModel.rawValue = this.rawValue.toString()
                activityCameraScannerViewModel.format = this.format.toString()
                activityCameraScannerViewModel.setNewCard()

                val intent = Intent(applicationContext, MainActivity::class.java)
                intent.putExtra("rawValue", this.rawValue.toString())
                intent.putExtra("format", this.format.toString())
                startActivity(intent)
            }
        }
    }

代码的实际结果是大量的插入(随机数)。我将感谢任何帮助。如果有人需要更多的代码,我会编辑的问题。谢谢。

31moq8wy

31moq8wy1#

简单的决议:
将扫描仪作为processBarcode函数的参数传递并调用
scanner.close()
完整代码:

private fun processBarcode(barcodeList: List<Barcode>, scanner: BarcodeScanner) {
        if (barcodeList.isNotEmpty()) {
            with (barcodeList.first()) {

                val rawValue = this.rawValue.toString()
                val format = this.format.toString()
                activityCameraScannerViewModel.rawValue = rawValue
                activityCameraScannerViewModel.format = format

                activityCameraScannerViewModel.setNewCard()
                val intent = Intent(applicationContext, MainActivity::class.java)
                startActivity(intent)
                scanner.close()
            }
        }
    }
44u64gxh

44u64gxh2#

如果使用摄像机提供程序,用途:

barcodeScanner.close();
cameraProvider.unbindAll();

相关问题