【发布时间】:2021-11-09 15:58:03
【问题描述】:
我有一个小型测试应用来扫描二维码。它与 Mobile vision 一起使用,但我想迁移到 ML kit。`
工作原理:相机以实时预览开始。 什么不工作:如果我指向一个二维码,它不会触发 task.isSuccessful
如果我取出 if(task.isSuccessful()) 然后在启动相机后立即出现错误 java.lang.IllegalStateException:任务尚未完成 在task.getResult()中
这是我的代码,二维码扫描仪在单独的 Activity 中:
import androidx.appcompat.app.AppCompatActivity;
import androidx.camera.view.PreviewView;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import com.google.mlkit.vision.barcode.Barcode;
import com.google.mlkit.vision.barcode.BarcodeScanner;
import com.google.mlkit.vision.barcode.BarcodeScannerOptions;
import com.google.mlkit.vision.barcode.BarcodeScanning;
import com.google.mlkit.vision.camera.CameraSourceConfig;
import com.google.mlkit.vision.camera.CameraXSource;
import java.util.List;
public class ScanQRcodeActivity extends AppCompatActivity {
private CameraXSource cameraXSource;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scan_q_rcode);
PreviewView preview = findViewById(R.id.view);
BarcodeScanner barcodeScanner = BarcodeScanning.getClient(new BarcodeScannerOptions.Builder().setBarcodeFormats(Barcode.FORMAT_QR_CODE).build());
CameraSourceConfig cameraSourceConfig = new CameraSourceConfig.Builder(this, barcodeScanner, task -> {
if (task.isSuccessful()){
final List<Barcode> qrCode = task.getResult();
if (qrCode.size() != 0) {
Intent intent = new Intent();
intent.putExtra("QR", qrCode.get(0).getDisplayValue());
setResult(Activity.RESULT_OK, intent);
cameraXSource.stop();
finish();
}
}
}).setFacing(CameraSourceConfig.CAMERA_FACING_BACK).build();
cameraXSource = new CameraXSource(cameraSourceConfig, preview);
cameraXSource.start();
}
}
【问题讨论】:
标签: java android google-mlkit