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")
}
}
我尝试使用以下方法将二维码扫描仪添加到我的 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")
}
}