解决zxing的IntentIntegrator在使用setRequestCode时获取不到结果的问题

。_饼干妹妹 提交于 2020-08-13 16:08:13

在生产线组装时一个界面上可能需要同时扫多个码来绑定产品信息,所以想到用自定义的requestCode来区分,代码如下:

  @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
        if (result != null) {
            if (result.getContents() == null) {
                Toast.makeText(this, "你已经放弃了扫描", Toast.LENGTH_LONG).show();
            } else {
                switch (requestCode) {
                    case REQUEST_CODE_IMEI:
                        etImei.setText(result.getContents());
                        break;
                    case REQUEST_CODE_ASSET_NO:
                        etAssetNo.setText(result.getContents());
                        break;
                    default:
                        etDeviceNo.setText(result.getContents());
                }
            }
        } else {
            super.onActivityResult(requestCode, resultCode, data);
        }
    }


    private void scanQR(int requestCode) {
        IntentIntegrator integrator = new IntentIntegrator(this);

        integrator
                .setCaptureActivity(CustomCaptureActivity.class)
                .setRequestCode(requestCode)
                .setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES)
                .setPrompt("请对准要扫描的码")
                .setCameraId(0)
                .setBeepEnabled(true)
                .setBarcodeImageEnabled(false)
                .setOrientationLocked(true)
                .initiateScan();
    }

这时IntentResult返回的是null,解决方法就是在使用parseActivityResult方法时去掉requestCode参数, 即:

        IntentResult result = IntentIntegrator.parseActivityResult(resultCode, data);

参考: https://github.com/journeyapps/zxing-android-embedded/issues/382

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!