【问题标题】:How to grab zxing scan results and use them?如何获取 zxing 扫描结果并使用它们?
【发布时间】:2017-03-28 16:03:03
【问题描述】:

我是发展中国家的新人。我正在尝试在扫描 QR 图像后处理结果。我正在使用 Zxing 库。现在只有内容字符串可以检索任何数据。但我想扫描 qr 图像以获取 URL、telno 和字符串 /text(这将是一个编号的数量)。 您能否举个例子说明我如何获取 telno 和 text 的数据并存储在字符串中。目前只有一个 SCAN_RESULT 存储在内容中,但是如何从一个 QR 码一次获得多个结果。

private void onQrActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub

    if (requestCode == 0) {
        if (resultCode == RESULT_OK) {
            Log.d(TAG, "onActivityResult " + resultCode);
            String contents = data.getStringExtra("SCAN_RESULT");
            String format = data.getStringExtra("SCAN_RESULT_FORMAT");
            paymentmsg.setText(contents);
            value_Qr = Float.parseFloat(contents);
            // Toast.makeText(this, format, Toast.LENGTH_SHORT).show();
            format = data.getStringExtra("SCAN_RESULT_FORMAT");
            // Handle successful scan
        }
        else if (resultCode == RESULT_CANCELED) {
            // Handle cancel
        }
    }
}

【问题讨论】:

  • AFAIK,一个二维码只有一个内容,在SCAN_RESULT。如果您希望有一个包含多个部分的奇怪 QR 码,那很好,但您仍然只会得到一个 SCAN_RESULT 以及您在 QR 码中输入的任何组合字符串,并且您必须是将那个字符串解析成你放在那里的任何东西。

标签: android android-intent zxing qr-code


【解决方案1】:

您必须解析结果。结果在内容字符串中。解析内容字符串。 如果你的二维码是联系方式

if(contents.startsWith("BEGIN:")){

                    String[] tokens = contents.split("\n");

                    for (int i = 0; i < tokens.length; i++)
                        {
                        System.out.println(" "+tokens[i]);

                        if(tokens[i].startsWith("BEGIN:"))
                        {
                            Type= tokens[i].substring(6);
                        }
                        else if(tokens[i].startsWith("N:"))
                        {
                             Name= tokens[i].substring(2);
                        }
                        else if(tokens[i].startsWith("ORG:"))
                        {
                             Org= tokens[i].substring(4);
                        }
                        else if(tokens[i].startsWith("TEL:"))
                        {
                             Tel= tokens[i].substring(4);
                        }
                        else if(tokens[i].startsWith("URL:"))
                        {
                             Url= tokens[i].substring(4);
                        }
                        else if(tokens[i].startsWith("EMAIL:"))
                        {
                             Email= tokens[i].substring(6);
                        }
                        else if(tokens[i].startsWith("ADR:"))
                        {
                              Adr= tokens[i].substring(4);
                        }
                        else if(tokens[i].startsWith("NOTE:"))
                        {
                              Note= tokens[i].substring(5);
                        }

                        }   

如果你的 qr scannrd 是 url

else if(contents.startsWith("http://")||(contents.startsWith("www."))){

                    qr_url= contents;

如果您扫描的二维码是位置二维码

else if(contents.startsWith("geo:")){

                    String delims = "[ , ?q= ]+";
                    String[] tokens = contents.split(delims);

                    for (int i = 0; i < tokens.length; i++)
                    {
                        System.out.println(" "+tokens[i]);
                        if(tokens[i].startsWith(" geo:"))
                        {
                              qr_latitude= tokens[i].substring(4);

                        }
                    }
                    qr_latitude= tokens[0].substring(4);
                    qr_longitude=tokens[1];
                    geo_place=tokens[2];

等等你可以解析结果。都是关于如何解析字符串的。

【讨论】:

  • 那么你就解决了……如果你满意,请确保你接受这个答案:)
【解决方案2】:

当然,一个二维码意味着一个扫描结果。您会取回字符串、原始字节和其他一些元数据。如果你想将字符串解析成组件,你必须自己做,但你可以在你的应用程序中重新使用core/中的ResultParser类来轻松做到这一点。

【讨论】:

  • 谢谢,我后来发现这是一种 msg 格式,我必须以我的方式检索字符串。
【解决方案3】:

我认为下面的代码会对你有所帮助:

    ParsedResult tmpParseVcard = ResultParser.parseResult(result.getResult());
                AddressBookParsedResult vcardParsedResult = (AddressBookParsedResult) tmpParseVcard;
                Toast.makeText(MainActivity.this, "VCARD" + Arrays.toString(vcardParsedResult.getPhoneNumbers()), Toast.LENGTH_SHORT).show();
                Log.e("Phone number", Arrays.toString(vcardParsedResult.getPhoneNumbers()));
                Log.e("Phone Type", Arrays.toString(vcardParsedResult.getPhoneTypes()));

//AddressBookParsedResult - vcard //SMSParsedResult - 短信...等

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-10
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多