如何抓住zxing扫描结果并使用它们?

时间:2012-05-28 18:02:18

标签: android android-intent zxing qr-code

我是发展中地区的新人。我正在尝试在扫描QR图像后处理结果。我正在使用Zxing库。现在只有内容字符串可以检索任何数据。但我想扫描一个qr图像来获取URL,telno和一个字符串/文本(这将是一个编号的数量)。 你能用一个例子来说明如何获取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
        }
    }
}

3 个答案:

答案 0 :(得分:1)

您必须解析结果。结果在内容字符串中。解析内容字符串。 如果您的qr代码是联系

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;

如果你扫描的qr是位置qr

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];

依此类推你可以解析结果。它的全部内容都是关于如何解析字符串的。

答案 1 :(得分:0)

当然,一个QR码意味着一个扫描结果。你得到了字符串,原始字节和一些其他元数据。如果要将字符串解析为组件,则必须自己完成,但可以在应用程序中重复使用ResultParser中的core/类来轻松完成。

答案 2 :(得分:0)

我认为以下代码可以帮助您:

    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 - 短信...等