5

我在使用 ML Kit Barcode Scanner 时遇到问题。当我尝试解码示例二维码时,

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.qr_code_sample);
        FirebaseVisionImage image = FirebaseVisionImage.fromBitmap(bitmap);
        FirebaseVisionBarcodeDetector detector = FirebaseVision.getInstance().getVisionBarcodeDetector();
        Task<List<FirebaseVisionBarcode>> result = detector.detectInImage(image)
                .addOnSuccessListener(new OnSuccessListener<List<FirebaseVisionBarcode>>() {
                    @Override
                    public void onSuccess(List<FirebaseVisionBarcode> barcodes) {
                        for (FirebaseVisionBarcode barcode:barcodes) {
                            Log.e("Log", "QR Code: "+barcode.getUrl().getUrl());
                        }
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.e("Log", "Decode QR Code failed");
                    }
                });

输出是这样的:

QR Code: ""

如何解决这个问题呢?

4

2 回答 2

2

根据API ReferencegetUrl()是:

设置 iff getValueType()TYPE_URL

因此,您的条形码可能不是 URL/书签,或者 ML Kit 无法识别它。

我建议打印这 3 个值:

@Override
    public void onSuccess(List<FirebaseVisionBarcode> barcodes) {
        for (FirebaseVisionBarcode barcode:barcodes) {
            Log.e("Log", "QR Code: "+barcode.getDisplayValue()); //Returns barcode value in a user-friendly format.
            Log.e("Log", "Raw Value: "+barcode.getRawValue());//Returns barcode value as it was encoded in the barcode. 
            Log.e("Log", "Code Type: "+barcode.getValueType()); //This will tell you the type of your barcode
        }
    }

您可能会在前 2 行之一中找到所需的输出。第三行告诉您扫描的条形码是什么类型。

于 2018-05-11T11:58:48.517 回答
0

要从条形码中提取标题和 url,您需要在条形码中添加 Url Bookmark,而不仅仅是 Url。

包含 url 书签的条形码原始数据如下所示:MEBKM:TITLE:MyBookmark;URL:www.google.com;;

当您使用 ML KIT 扫描仅包含 url 的条形码时,您会获得如下原始数据:www.google.com

因此,为了能够从 FirebaseVisionBarcode.UrlBookmark 类型的对象中提取标题和 url 数据,您需要在该对象中包含这些数据。

尝试在此处生成二维码:https: //www.montreallisting.ca/article/qr-code-quick-response-scan-mobile-android-iphone-blackberry/ 然后使用该图片提取您想要的数据,您将视为差异。

于 2018-07-20T14:26:07.183 回答