如何获得QR码类型

时间:2013-06-04 16:54:55

标签: android qr-code zxing

我正在与Zxing库一起解码android的QR码。我可以得到QR码。现在,我想了解它返回的QR码类型(URL,Phone Nubmer,纯文本等)。我试图探索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);

            }
        });

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

2 个答案:

答案 0 :(得分:2)

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

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

然后,您可以通过IntentResult获取所需的所有数据。具体来说,要获取类型,您可以致电scanResult.getFormatName()

答案 1 :(得分:2)

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

CaptureActivity中有一个方法名handleDecodeExternally,它将数据返回给您的活动添加此行

intent.putExtra("QR_TYPE", getString(resultHandler.getDisplayTitle()));
活动结束前

然后将此值提供给您的活动onActivityResult

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

最后你有二维码的类型。

谢谢

修改

com.google.zxing.client.android包下的zixing库项目中,有一个名为CaptureActivity的活动。在该活动上,method名为handleDecodeExternally,其中简要显示条形码的内容,然后处理条形码扫描器外的结果。在该方法中,您有意图将您在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。谢谢