0

我是发展中国家的新人。我正在尝试在扫描 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
        }
    }
}
4

3 回答 3

2

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

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

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

于 2012-05-29T12:35:10.450 回答
0

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

于 2012-05-29T06:48:52.517 回答
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 - sms ...等

于 2017-03-28T08:03:03.207 回答