получить результат сканирования при использовании zxing? - PullRequest
2 голосов
/ 31 марта 2011

В настоящее время я использую библиотеку 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 ]

4 голосов
/ 31 марта 2011

Zxing сканирует множество штрих-кодов / QR-кодов, поэтому первое, что вам нужно сделать, это выяснить, является ли продукт UPC или QR-кодом:

    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);
            }
        }
    }   

Существует ряд доступных веб-сервисов, которые возвращают метаданные продукта с кодом UPC. Достаточно всеобъемлющим будет Google Search API для покупок . Например, вы можете получить json-представление продукта с UPC = 037988482481 с URL-адресом, который выглядит следующим образом:

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

Вам нужно заменить "your_key_here" на ваш ключ API Google.

Best Buy также предлагает RESTful API продуктов для всех продуктов, которые они несут, которые можно искать по коду UPC.

Вы захотите использовать AsyncTask для получения метаданных продукта, как только у вас будет UPC.

2 голосов
/ 27 марта 2014

Для этого вам не нужен '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 показывает, каков результат. Надеюсь, это поможет кому-то в будущем.

1 голос
/ 31 марта 2011

Вы можете проверить, что делает приложение Android ZXing. Исходный код клиента Android находится по адресу: Исходный код клиента ZXing для Android . Для номеров ISBN, исходный код для обработки: Код обработчика результатов ISBN приложения Android ZXing

Для поиска товаров и книг код 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));
}
0 голосов
/ 24 апреля 2017

В вашем 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);
    }

Вы не звонили result.getContents().

0 голосов
/ 27 апреля 2012

Я просто хочу добавить, что если вы хотите иметь возможность нажать обратно без RuntimeException, окружите ваш оператор if блоком try catch.итак:

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

Надеюсь, это помогло неизбежному краху, без которого вы столкнетесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...