1

我正在使用 Zxing 库来解码 android 的 QR 码。我可以得到二维码。现在,我想了解它返回的二维码类型(URL、电话号码、纯文本等)。我试图探索ResultParser类,但我无法使用它。

更新:我使用 ResultParser 类删除了我的错误程序。

这是我的 onActivityResult 代码。

    @Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    if (requestCode == 0) {
        if (resultCode == RESULT_OK) {
            contents = intent.getStringExtra("SCAN_RESULT");
        // check the contents strings here 
          //  Need to get actual return type of result 
            if (contents.contains("https:") || contents.contains("http:")) {
                aBarcode.setBarcode_Type(WEB_URL);
                Intent browserIntent = new Intent(Intent.ACTION_VIEW,
                        Uri.parse(contents));
                startActivity(browserIntent);

            } else {
                aBarcode.setBarcode_Type(PLAIN_TEXT);
                Toast.makeText(getApplicationContext(), contents,
                        Toast.LENGTH_LONG).show();
            }
            barcodeList.add(aBarcode);
            // show previous barcodes detail
            showBarcodeReaderHistory();
            // Handle successful scan
        } else if (resultCode == RESULT_CANCELED) {
            Log.e("Barcode Result", "Result canceled");
        }
    }
}

更新:我打开 ScanActivity 像:

// start scan after button click
        btnScanQRCode.setOnClickListener(new OnClickListener() {
            public void onClick(View arg0) {

                 Intent intent = new Intent(
                 "com.google.zxing.client.android.SCAN");
                 intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
                 startActivityForResult(intent, 0);

            }
        });

希望,我向所有人澄清。等待你的伟大敲门声。谢谢你。

4

2 回答 2

2

您不应该Intent自己从返回的附加内容中获得结果。相反,这样做:

IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);

然后,您可以通过IntentResult. 具体获取类型,可以调用scanResult.getFormatName()

于 2013-06-04T17:08:58.343 回答
2

您可以修改CaptureActivity库以将 QR 码类型添加到您的 Activity 中。

CaptureActivity一个方法名称handleDecodeExternally将数据返回到您的 Activity 添加此行

intent.putExtra("QR_TYPE", getString(resultHandler.getDisplayTitle()));

在活动结束之前。

然后将此值获取到您的活动中onActivityResult

String type = intent.getStringExtra("QR_TYPE");

最后你有二维码的类型。

谢谢

编辑

在你的紫星库项目com.google.zxing.client.android包下有一个名为CaptureActivity. 在那个 Activity 上有一个method名称handleDecodeExternally,它简要地显示条形码的内容,然后在 Barcode Scanner 之外处理结果。在该方法中,您可以将在 QR 上找到的数据发送到您的活动中。

在您离开此活动之前添加该行,添加后它将是这样的 -

      // ------------- Mine Added -------------------
      intent.putExtra("QR_TYPE", getString(resultHandler.getDisplayTitle()));
      // --------------------------------------------

      sendReplyMessage(R.id.return_scan_result, intent); 

我想你会sendReplyMessage(R.id.return_scan_result, intent);在 650 +/- 行中找到它CaptureActivity。谢谢

于 2013-06-05T07:42:23.877 回答