Я искал, как добавить сканер штрих-кода в свое приложение. Есть ли примеры или как мне это легко сделать?
Использование ZXing для создания приложения для сканирования штрих-кода Android
Ответы (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
- Загрузите zxing-master.zip со страницы "https://github.com/zxing/zxing"
- Разархивируйте zxing-master.zip, используйте eclipse для импорта проекта "android" в zxing-master
- Загрузите core-3.2.1.jar со страницы "http://repo1.maven.org/maven2/com/google/zxing/core/3.2.1/ "
- Создайте папку "libs" в проекте "android" и вставьте cor-3.2.1.jar в папку libs.
- Щелкните проект: выберите «Свойства» -> «Компилятор Java», чтобы изменить уровень на 1,7. Затем нажмите «Android» и измените «Project build target» на android 4.4.2+, потому что для использования 1.7 требуется компиляция с Android 4.4.
- Если «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 /» и вставить в свой проект.
- Очистить и построить проект. Если в вашем проекте отображается ошибка «switch - case», вы должны изменить их на «if - else».
- Завершенный. Очистить и построить проект. Вы можете нажать «Свойства»> «Android»> «Есть ли библиотеки», чтобы использовать их в своем проекте.
У меня была проблема с реализацией кода, пока я не нашел какой-то веб-сайт (я не могу найти его прямо сейчас), на котором объяснялось, что вам нужно включить имя пакета в имя intent.putExtra.
Он вытащил бы приложение, но не распознал бы штрих-коды, и когда я изменил его с.
intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
to
intent.putExtra("com.google.zxing.client.android.SCAN.SCAN_MODE", "QR_CODE_MODE");
Это сработало отлично. Просто совет для всех начинающих программистов Android.
Лучше использовать предоставленный 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
Использование Zxing таким образом требует, чтобы пользователь также установил приложение сканера штрих-кода, что не идеально. Вероятно, вы захотите напрямую встроить Zxing в свое приложение.
Я настоятельно рекомендую использовать эту библиотеку: https://github.com/dm77/barcodescanner
Требуются все безумные проблемы сборки, с которыми вы столкнетесь, пытаясь напрямую интегрировать Xzing или Zbar. Он использует эти библиотеки под прикрытием, но обертывает их очень простым в использовании API.
Если вы хотите включить в свой код и не использовать IntentIntegrator, рекомендованный библиотекой ZXing, вы можете использовать некоторые из этих портов:
Пользуюсь первым, и он отлично работает! У него есть образец проекта, на котором можно его примерить.
Обнаружение штрих-кода теперь доступно в сервисах Google Play а>. Лаборатория кода процесса установки, вот api docs и образец проекта.
Вы можете использовать это краткое руководство по началу работы http://shyyko.wordpress.com/2013/07/30/zxing-with-android-quick-start/ с простым примером проекта для создания приложения для Android без IntentIntegrator.
com.google.zxing.NotFoundException
и _2 _... в DecodeAsyncTask
(внутренний класс PreviewCallback
), результат, полученный onPostExecute
, всегда равен нулю, даже если QR-код находится внутри рамочного прямоугольника ... также я не вижу ни лазера, ни желтых точек-кандидатов, которые появляются в исходном приложении zxing (не уверен, реализовали ли вы это ...)
- person Lucas Jota; 28.01.2014