从Android ZXing IntentIntegrator中提取结果

时间:2011-06-04 20:43:47

标签: android android-intent qr-code zxing

我对ZXing很新,并一直在探索他们的API。 我看过Using ZXing to create an android barcode scanning appgetting scan result when using zxing?

据我所知,扫描结果的详细信息在字符串“contents”中。我如何提取细节?查看QR生成器,http://zxing.appspot.com/generator/有许多字段,如姓名,公司和电话号码。我如何提取这些细节?

我需要像

这样的东西
//String extractedName = contents.getName() 

对不起,我对此很新。如果有人能为我提供详细的步骤,我将不胜感激。感谢。

测试活动

public Button.OnClickListener mScan = new Button.OnClickListener() {
public void onClick(View v) {
    IntentIntegrator.initiateScan(MenuActivity.this);
}
};


public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 0) {
    if (resultCode == RESULT_OK) {
        String contents = intent.getStringExtra("SCAN_RESULT");
        String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
        // Handle successful scan
        //How to get name from contents?

    } else if (resultCode == RESULT_CANCELED) {
        // Handle cancel
    }
}
}

4 个答案:

答案 0 :(得分:2)

我已经成功提取了它。扫描结果位于字符串'contents'中。让我们说你扫描了一个名称和ID的代码。该字符串将包含由空格分隔的“name”“id”。您可以使用for循环来处理它。

答案 1 :(得分:1)

  

我如何提取这些细节?

QR码只是图片形式的文件。正如您需要知道文件格式才能使用它之前,您需要先知道QR码内容的格式才能使用它。

This ZXing Wiki page包含有关他们所见过的QR码内容类型的信息。

答案 2 :(得分:1)

在IntentIntegrator中创建对象

protected void onCreate(Bundle savedInstanceState) { <br>
        super.onCreate(savedInstanceState);<br>
        setContentView(R.layout.activity_main);<br>
        new IntentIntegrator(this).initiateScan();<br>
    }

覆盖onActivityResult方法

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent intent) { <br>
        IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);<br>
        if (scanResult != null) {<br>
            TextView t = (TextView) findViewById(R.id.textView2);<br>
            String data[] =scanResult.getContents().split("\n");<br>
            for(String k:data){<br>
                t.append(k+"\n");<br>
            }<br>
        }<br>

        // else continue with any other code you need in the method

    }

在此我使用getContents方法获取数据并拆分该数据行。然后将该数据添加到textview2

答案 3 :(得分:0)

首先检查字符串的开头,例如,如果它与“vcard”一起开始(“xyxy”)。小心! “vcard”不是正确的字符串!

如果它是一个vCard,我曾经把它拆分成零件。

String[] vCardContent = content.split("\n");

下一步是检查每个部分是否从例如“N:”别名“姓名”