【发布时间】:2022-10-17 14:51:05
【问题描述】:
我正在开发一个从图像中读取二维码的 Java 程序。我有以下代码:
@Override
public Object callback(ImageProxy imageProxy, Object[] params) {
WritableNativeMap writableNativeMap = new WritableNativeMap();
BarcodeScannerOptions options =
new BarcodeScannerOptions.Builder()
.setBarcodeFormats(Barcode.FORMAT_QR_CODE)
.build();
Image mediaImage = imageProxy.getImage();
final List<Barcode>[] barcodesList = new List[]{Collections.<Barcode>emptyList()};
if (mediaImage != null) {
InputImage image =
InputImage.fromMediaImage(mediaImage, imageProxy.getImageInfo().getRotationDegrees());
BarcodeScanner scanner = BarcodeScanning.getClient(options);
Task < List < Barcode >> result = scanner.process(image);
result.addOnSuccessListener(new OnSuccessListener < List < Barcode >> () {
@Override
public void onSuccess(List < Barcode > barcodes) {
for (Barcode barcode: barcodes) {
int valueType = barcode.getValueType();
switch (valueType) {
case Barcode.TYPE_TEXT:
// TODO
case Barcode.TYPE_URL:
Log.d(TAG, barcode.getUrl().getUrl());
writableNativeMap.putString("URL", barcode.getUrl().getUrl());
// TODO
break;
}
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// ...
}
})
.addOnCompleteListener(results -> imageProxy.close());
}
return writableNativeMap;
}
当我调用这个函数时,它会返回{}。即使它到达Barcode.TYPE_URL 案例中的Log.d 语句。所以我知道它把东西放在 writableNativeMap 中。当我在 return 语句之前执行 .putString 时,它就可以工作了。有人可以帮我弄这个吗?
【问题讨论】:
标签: java android react-native google-mlkit