【问题标题】:how to get QR code type如何获取二维码类型
【发布时间】:2013-06-04 16:54:54
【问题描述】:

我正在使用 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);

            }
        });

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

【问题讨论】:

    标签: android qr-code zxing


    【解决方案1】:

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

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

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

    在活动结束之前。

    然后将这个值传给你的Activity的onActivityResult

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

    你终于有了二维码的类型。

    谢谢

    编辑

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

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

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

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

    【讨论】:

    • 我在哪里添加 intent.putExtra("QR_TYPE", getString(resultHandler.getDisplayTitle())); ?
    • 您必须更改紫星库的源代码才能获取二维码类型,因为默认情况下它们没有返回类型。仅返回 SCAN_RESULT、SCAN_RESULT_FORMAT、SCAN_RESULT_BYTES 和 SCAN_RESULT_ORIENTATION。
    【解决方案2】:

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

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

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

    【讨论】:

    • IntentResult 类在 com.google.zxing.integration.android 包中
    • 另外,如果您还没有,我建议您查看zxing's Scanning Via Intent 指南。
    • 同时导入集成文件夹。如果您打算让 Zxing 处理扫描,那么IntentIntegrator 是要走的路。
    • 感谢先生,感谢您的大力支持。成功导入上述类后,出现错误。像:06-05 00:45:36.215: E/AndroidRuntime(22453): java.lang.RuntimeException: 传递结果失败 ResultInfo{who=null, request=0, result=-1, data=Intent { act=com. google.zxing.client.android.SCAN flg=0x80000(有附加功能)}} 到活动 {com.agv.qrcodereaderscanner/com.agv.qrcodereaderscanner.QRActivity}:java.lang.NullPointerException
    • 不幸的是,NullPointerException 被切断了。在您的代码中跟踪它。找出什么变量是空的以及为什么。如果是IntentResult,是不是通过IntentIntegrator启动了Intent?
    猜你喜欢
    • 2020-09-29
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 1970-01-01
    相关资源
    最近更新 更多