Использование ZXing для создания приложения для сканирования штрих-кода Android

Я искал, как добавить сканер штрих-кода в свое приложение. Есть ли примеры или как мне это легко сделать?


person wajiw    schedule 12.01.2010    source источник
comment
Проверьте мой подробный ответ со снимками экрана и образцом приложения для Android.   -  person Alexander Farber    schedule 02.06.2015
comment
ZXing - не единственный способ считывания штрих-кода. По состоянию на 2016 год стало намного проще использовать Android Barcode API.   -  person Dan Dascalescu    schedule 11.08.2016
comment
Я сделал код для генерации штрих-кода и сканирования штрих-кода. Вы можете следовать этому, чтобы получить пошаговый код. stackoverflow.com/a/58742737/11613683   -  person Pramesh Bhalala    schedule 07.11.2019


Ответы (7)


Проект ZXing предоставляет автономное приложение для считывания штрих-кода, которое через механизм намерений Android может вызываться другими приложениями, которые хотят интегрировать сканирование штрих-кода.

Самый простой способ сделать это - вызвать ZXing SCAN Intent из вашего приложения, вот так:

public Button.OnClickListener mScan = new Button.OnClickListener() {
    public void onClick(View v) {
        Intent intent = new Intent("com.google.zxing.client.android.SCAN");
        intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
        startActivityForResult(intent, 0);
    }
};

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
        } else if (resultCode == RESULT_CANCELED) {
            // Handle cancel
        }
    }
}

Нажатие кнопки, связанной с mScan, запустит непосредственно на экране сканера штрих-кода ZXing (или приведет к сбою, если ZXing не установлен). Как только штрих-код будет распознан, вы получите результат в своем Activity, здесь, в переменной contents.

Чтобы избежать сбоев и упростить вам жизнь, в ZXing есть предоставил служебный класс, который вы можете интегрировать в свое приложение, чтобы сделать установку ZXing более плавной, перенаправив пользователя на Android Market, если у него нет он уже установлен.

Наконец, если вы хотите интегрировать сканирование штрих-кода непосредственно в свое приложение, не полагаясь на установку отдельного приложения ZXing, тогда это проект с открытым исходным кодом, и вы можете это сделать! :)


Изменить: Кто-то отредактировал это руководство в этом ответе (это звучит немного странно, я не могу поручиться за его точность, и я не уверен, почему они используют Eclipse в 2015 году):

Пошаговая инструкция по настройке zxing 3.2.1 в eclipse

  1. Загрузите zxing-master.zip со страницы "https://github.com/zxing/zxing"
  2. Разархивируйте zxing-master.zip, используйте eclipse для импорта проекта "android" в zxing-master
  3. Загрузите core-3.2.1.jar со страницы "http://repo1.maven.org/maven2/com/google/zxing/core/3.2.1/ "
  4. Создайте папку "libs" в проекте "android" и вставьте cor-3.2.1.jar в папку libs.
  5. Щелкните проект: выберите «Свойства» -> «Компилятор Java», чтобы изменить уровень на 1,7. Затем нажмите «Android» и измените «Project build target» на android 4.4.2+, потому что для использования 1.7 требуется компиляция с Android 4.4.
  6. Если «CameraConfigurationUtils.java» не существует в «zxing-master / android / app / src / main / java / com / google / zxing / client / android / camera /». Вы можете скопировать его из «zxing-master / android-core / src / main / java / com / google / zxing / client / android / camera /» и вставить в свой проект.
  7. Очистить и построить проект. Если в вашем проекте отображается ошибка «switch - case», вы должны изменить их на «if - else».
  8. Завершенный. Очистить и построить проект. Вы можете нажать «Свойства»> «Android»> «Есть ли библиотеки», чтобы использовать их в своем проекте.
person Christopher Orr    schedule 12.01.2010
comment
Спасибо, парни! Я новичок в разработке Android и действительно просто хотел начать выяснять, что нужно, чтобы сканер штрих-кода заработал. Мне все еще нужно придумать, как добавить com.google.zxing в свой проект. Это так же просто, как просто использовать com.google.zxing в моем коде, или мне нужно загрузить исходный код и импортировать его в свой файл манифеста? - person wajiw; 13.01.2010
comment
(Я разработчик проекта, кстати, мы можем продолжить на groups.google.com/group/zxing) Кристофер прав. Используя такой код, вам вообще не нужно импортировать код проекта. Вы вызываете приложение «Сканер штрих-кода» через намерение; в вашем приложении нет кода сканирования штрих-кода. - person Sean Owen; 13.01.2010
comment
Действительно хороший способ сделать это включает в себя немного больше кода, который гарантирует, что пользователю будет предложено установить сканер штрих-кода, если это необходимо. Это еще одна ссылка, на которую он ссылался. Скопируйте класс в code.google.com/p/zxing/source/browse/trunk/android-integration/ и используйте это. И снова никакой другой код не нужен. Если вы хотите, вы можете пройти весь путь и встроить код сканирования, но без веских причин для этого это только сложнее для вас. - person Sean Owen; 13.01.2010
comment
Итак, чтобы использовать этот IntentIntegrator, мне нужно скопировать его в свой проект (в этом случае svn: externals может быть хорошей идеей, чтобы избежать сохранения устаревшей версии)? - person agentofuser; 11.04.2010
comment
Да, вам нужно будет скопировать его (принимая во внимание требования лицензии Apache). Хотя это так просто, я бы не стал беспокоиться об обновлении через svn: externals или что-то еще. - person Christopher Orr; 12.04.2010
comment
Используя это, если я сканирую штрих-код, он добавляет отсканированное содержимое в приложение сканера штрих-кода, могу ли я отключить это? - person Seshu Vinay; 14.12.2011
comment
Я хочу сканировать штрих-код без установки приложения. если мы хотим напрямую сканировать код, ur говоря, скопируйте исходный код в проект. может ли кто-нибудь четко сказать, какой код должен быть добавлен. в этой ссылке много папок, правильно? code.google .com / p / zxing / source / browse / здесь много. Так что кто-нибудь четко скажет, какие папки нужно добавить. Пожалуйста, дайте решение этой проблемы. - person user1213202; 14.06.2012
comment
Могу ли я получить изображение со сканера штрих-кода? Потому что содержимое содержит только название штрих-кода. Мне нужно изображение, пожалуйста, помогите. - person Ashish Mishra; 28.03.2013
comment
@AshishMishra: Изображение чего? Информация, закодированная в штрих-коде, является текстовой (или числовой), и это то, что вы получаете. Он может кодировать, где получить изображение (URL-адрес для его загрузки или идентификатор продукта для поиска в каком-либо каталоге или что-то в этом роде), но это зависит от конкретного типа кода, который вы сканируете. - person Jan Hudec; 24.04.2013
comment
Я сделал код для генерации штрих-кода и сканирования штрих-кода. Вы можете следовать этому, чтобы получить пошаговый код. stackoverflow.com/a/58742737/11613683 - person Pramesh Bhalala; 07.11.2019

У меня была проблема с реализацией кода, пока я не нашел какой-то веб-сайт (я не могу найти его прямо сейчас), на котором объяснялось, что вам нужно включить имя пакета в имя intent.putExtra.

Он вытащил бы приложение, но не распознал бы штрих-коды, и когда я изменил его с.

intent.putExtra("SCAN_MODE", "QR_CODE_MODE");

to

intent.putExtra("com.google.zxing.client.android.SCAN.SCAN_MODE", "QR_CODE_MODE");

Это сработало отлично. Просто совет для всех начинающих программистов Android.

person user496827    schedule 04.11.2010

Лучше использовать предоставленный IntentInegrator. Это позволяет вам предложить пользователю установить сканер штрих-кода, если он у него отсутствует. Он также позволяет настраивать сообщения. Константа IntentIntegrator.REQUEST_CODE содержит значение кода запроса для onActivityResult, который нужно проверить в приведенном выше блоке if.

IntentIntegrator intentIntegrator = new IntentIntegrator(this); // where this is activity 
intentIntegrator.initiateScan(IntentIntegrator.ALL_CODE_TYPES); // or QR_CODE_TYPES if you need to scan QR

IntentIntegrator.java

person Yack    schedule 19.10.2010

Использование Zxing таким образом требует, чтобы пользователь также установил приложение сканера штрих-кода, что не идеально. Вероятно, вы захотите напрямую встроить Zxing в свое приложение.

Я настоятельно рекомендую использовать эту библиотеку: https://github.com/dm77/barcodescanner

Требуются все безумные проблемы сборки, с которыми вы столкнетесь, пытаясь напрямую интегрировать Xzing или Zbar. Он использует эти библиотеки под прикрытием, но обертывает их очень простым в использовании API.

person Michael Peterson    schedule 14.06.2014

Если вы хотите включить в свой код и не использовать IntentIntegrator, рекомендованный библиотекой ZXing, вы можете использовать некоторые из этих портов:

Пользуюсь первым, и он отлично работает! У него есть образец проекта, на котором можно его примерить.

person Aracem    schedule 12.07.2012
comment
Первый поддерживает только сканирование. Второй - хороший пример кодирования QR-кода, сработал у меня. - person Victor Sergienko; 27.09.2013
comment
Обе ссылки не работают (Google Code был закрыт). Может быть, вы можете их заменить (например, эти проекты теперь могут быть на GitHub)? - person Peter Mortensen; 26.04.2019

Обнаружение штрих-кода теперь доступно в сервисах Google Play . Лаборатория кода процесса установки, вот api docs и образец проекта.

person Jim Baca    schedule 22.08.2015
comment
Это проще, чем использовать Zxing. - person Dan Dascalescu; 11.08.2016

Вы можете использовать это краткое руководство по началу работы http://shyyko.wordpress.com/2013/07/30/zxing-with-android-quick-start/ с простым примером проекта для создания приложения для Android без IntentIntegrator.

person shyyko.serhiy    schedule 06.09.2013
comment
Я пробовал ваш примерный проект, и я не могу заставить его сканировать QRCode, в logcat я получаю com.google.zxing.NotFoundException и _2 _... в DecodeAsyncTask (внутренний класс PreviewCallback), результат, полученный onPostExecute, всегда равен нулю, даже если QR-код находится внутри рамочного прямоугольника ... также я не вижу ни лазера, ни желтых точек-кандидатов, которые появляются в исходном приложении zxing (не уверен, реализовали ли вы это ...) - person Lucas Jota; 28.01.2014
comment
нашел это! это только сканирование в альбомном режиме ... есть идеи, как это решить? - person Lucas Jota; 28.01.2014
comment
Нет ни лазера, ни желтых точек-кандидатов, потому что это просто пример того, как ZXing может быть интегрирован в случае, если вы хотите использовать другую компоновку и функции, чем при подходе Intent. Если вам подходит макет Intent, лучше придерживаться подхода, предложенного Кристофером Орром. - person shyyko.serhiy; 29.01.2014