使用zxing时获取扫描结果?

时间:2011-03-31 18:29:49

标签: android zxing

我目前正在我的应用中使用Zxing库。例如,在扫描书籍的条形码后,如何从扫描结果中获取图像,描述等内容。

              @Override
      public void onActivityResult(int requestCode, int resultCode, Intent intent) {
          switch(requestCode) {
          case IntentIntegrator.REQUEST_CODE:
              if (resultCode == RESULT_OK) {
                  IntentResult scanResult = 
                      IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
              } else if (resultCode == RESULT_CANCELED) {
                showDialog("failed", "You messed up");
              }
          }
      }

感谢您的帮助

5 个答案:

答案 0 :(得分:4)

Zxing扫描各种条码/二维码,所以你需要做的第一件事是弄清楚它是产品UPC还是二维码:

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (data != null) {
            String response = data.getAction();

            if(Pattern.matches("[0-9]{1,13}", response)) {
                // response is a UPC code, fetch product meta data
                // using Google Products API, Best Buy Remix, etc.          
            } else {
                // QR code - phone #, url, location, email, etc. 
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse(response));
                startActivity(intent);
            }
        }
    }   

有许多可用的Web服务将在给定UPC代码的情况下返回产品元数据。一个相当全面的是Google的Search API for Shopping。例如,您可以使用UPC = 037988482481获取产品的json表示,其URL如下所示:

  

https://www.googleapis.com/shopping/search/v1/public/products?country=US&key=your_key_here&restrictBy=gtin:037988482481

您需要将“your_key_here”替换为Google API密钥。

百思买还为他们携带的所有产品提供RESTful products API,可通过UPC代码进行搜索。

一旦拥有UPC,您将需要使用AsyncTask来获取产品元数据。

答案 1 :(得分:2)

你不需要' IntentResult'或者' IntentIntegrator'为此。
你可以这样做:

Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.putExtra("SCAN_MODE", "PRODUCT_MODE");
startActivityForResult(intent, 0);

然后在onActivityResult

if (requestCode == 0) {
    if ((resultCode == RESULT_CANCELED) || (resultCode == -1000)) {
    Toast.makeText(WebViewActivity.this, "Nothing captured",
                    Toast.LENGTH_SHORT).show();
} else {
    String capturedQrValue = data.getStringExtra("barcode_data");
}
}

通过此扫描条形码,现在Zxing代码中还有另一个使用Google API查找该ISBN的库。 在类Intents.java中,您可以获得意图需要的额外内容以及类ISBNResultHandler显示结果的信息。 希望它能帮助将来的某个人。

答案 2 :(得分:1)

您可以查看Android ZXing应用的功能。 Android客户端的源代码位于:ZXing Android client source code。对于ISBN号,处理的源代码为:Android ZXing app's ISBN Result Handler code

对于产品和图书搜索,Android代码会调用ResultHandler.java中的这两个函数:

// Uses the mobile-specific version of Product Search, which is formatted for small screens.
final void openProductSearch(String upc) {
    Uri uri = Uri.parse("http://www.google." + LocaleManager.getProductSearchCountryTLD() +
        "/m/products?q=" + upc + "&source=zxing");
    launchIntent(new Intent(Intent.ACTION_VIEW, uri));
}

final void openBookSearch(String isbn) {
    Uri uri = Uri.parse("http://books.google." + LocaleManager.getBookSearchCountryTLD() +
        "/books?vid=isbn" + isbn);
    launchIntent(new Intent(Intent.ACTION_VIEW, uri));
}

答案 3 :(得分:0)

在您的??中执行以下代码

onActivityResult

您尚未拨打 IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); if(result != null) { if(result.getContents() == null) { Toast.makeText(this, "Cancelled", Toast.LENGTH_LONG).show(); } else { String qrCode=result.getContents(); } } else { // This is important, otherwise the result will not be passed to the fragment super.onActivityResult(requestCode, resultCode, data); }

答案 4 :(得分:-1)

我只是想补充一点,如果你想能够在没有RuntimeException的情况下按下if语句并使用try catch块。这样:

 try{
 /// get scanned code here
 } catch(RuntimeException e) {
 e.getStackTrace();
 {

希望如果没有它,你将面临不可避免的崩溃。