Firebase MLKit QRCode 扫描失败,没有错误堆栈跟踪

Firebase MLKit QRCode scanning fails without error stack trace

我尝试使用以下方法将二维码扫描仪添加到我的 Android 应用程序:

fun scanQRCode(bitmap: Bitmap): String? {
    val options = FirebaseVisionBarcodeDetectorOptions.Builder()
            .setBarcodeFormats(FirebaseVisionBarcode.FORMAT_QR_CODE)
            .build()
    val detector = FirebaseVision.getInstance().getVisionBarcodeDetector(options);
    val image = FirebaseVisionImage.fromBitmap(bitmap)
    var id: String? = ""
    detector.detectInImage(image).addOnSuccessListener {
        if (it.isEmpty()) {
            id = null
            return@addOnSuccessListener
        }
        for (firebaseBarcode in it) {
            val a = it[0].rawValue ?: ""
            id = a

        }
    }.addOnFailureListener {
        id = null
    }
    return id
}

当 运行 时,应用既不会触发 onFailure 也不会触发 onSuccess 回调。我的 ID returns 始终为 null,我在 logcat:

中收到以下警告
W/DynamiteModule: Local module descriptor class for com.google.android.gms.vision.dynamite.barcode not found.
I/DynamiteModule: Considering local module com.google.android.gms.vision.dynamite.barcode:0 and remote module com.google.android.gms.vision.dynamite.barcode:0
D/BarcodeNativeHandle: Cannot load feature, fall back to load dynamite module.
I/DynamiteModule: Considering local module com.google.android.gms.vision.barcode:0 and remote module com.google.android.gms.vision.barcode:1
I/DynamiteModule: Selected remote version of com.google.android.gms.vision.barcode, version >= 1

我已经在测试时检查了我的互联网连接 phone (HTC Desire 19+) 并删除了 Google Play 服务的本地缓存。

我的 gradle 二维码扫描依赖项如下:

implementation "com.google.firebase:firebase-ml-model-interpreter:22.0.3"
implementation "com.google.firebase:firebase-ml-vision:24.0.3"
implementation 'com.google.firebase:firebase-core:17.4.1'
implementation 'com.google.android.gms:play-services-vision:20.0.0'

有人 运行 以前参与过这个吗?这是我的代码库中的问题还是 firebase 问题?

我发现了错误,它实际上在我的代码库中。 scanQRCode()的return值为扫描结果值,但扫描过程是异步的,所以总是return一个空字符串。 我通过添加回调来传递值来修复错误:

fun scanQRCode(bitmap: Bitmap, callback: QRInterface) {
    val options = FirebaseVisionBarcodeDetectorOptions.Builder()
            .setBarcodeFormats(FirebaseVisionBarcode.FORMAT_QR_CODE)
            .build()
    val detector = FirebaseVision.getInstance().getVisionBarcodeDetector(options);
    val image = FirebaseVisionImage.fromBitmap(bitmap)
    detector.detectInImage(image).addOnSuccessListener {
        if (it.isEmpty()) {
            callback.onQRScanFinished(null)
            return@addOnSuccessListener
        }
        for (firebaseBarcode in it) {
            val a = it[0].rawValue ?: ""
            callback.onQRScanFinished(a)
            Log.d("QRScanner", "successful")

        }
    }.addOnFailureListener {
        it.printStackTrace()
        callback.onQRScanFinished(null)

        Log.d("QRScanner", "failed")
    }
}