Распознавание Штрих-Кодов Android

В этой статье мы будем использовать ZXing (Zebra Crossing) для расшифровки штрих-кода в нашем приложении для Android. Используя ZXing, нам не нужно беспокоиться о том, что у пользователя нет сканера штрих-кода, поскольку об этом позаботятся классы, предоставляемые библиотекой.

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



Создание нового проекта



Шаг 1
В Eclipse создайте новый проект Android. Введите имя приложения, имя проекта и имя пакета.



Распознавание штрих-кодов Android



Шаг 2
Откройте основной шаблон.

Eclipse должен был создать стандартный шаблон.

Внутри него замените существующий контент кнопкой

  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
   

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android " xmlns:tools="http://schemas.android.com/tools " android:layout_width="match_parent " android:layout_height="match_parent " > <Button android:id="@+id/scan_button " android:layout_width="wrap_content " android:layout_height="wrap_content " android:layout_centerHorizontal="true " android:text="@string/scan " /> </RelativeLayout>

После кнопки добавим два текстовых поля, в которых будут отображаться результаты отсканированной информации.



<TextView android:id="@+id/scan_format" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textIsSelectable="true" android:layout_centerHorizontal="true" android:layout_below="@id/scan_button" /> <TextView android:id="@+id/scan_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textIsSelectable="true" android:layout_centerHorizontal="true" android:layout_below="@id/scan_format" />

Добавьте текст к кнопке.

Открыть файл разрешение/значения/строки

<string name="scan">Scan</string>

Для сканирования пользователю придется нажать на кнопку.

Когда приложение получит результат распознавания, оно отобразит его в текстовых полях.



Интеграция ZXing



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

В этом приложении мы рассмотрим метод, вызывающий соответствующую функцию другого приложения.

Если у пользователя нет данного приложения, ему будет предложено его скачать.

В Eclipse мы добавим в ваш проект новый пакет. Для этого щелкните правой кнопкой мыши по папке источник и выберите «Новый» -> «Пакет», а затем введите com.google.zxing.integration.android как имя пакета.



Распознавание штрих-кодов Android



Шаг 2
Eclipse предлагает несколько способов импорта существующего кода в проект. В этой статье самым простым методом будет создание двух классов, содержащих код из ZXing. Щелкните правой кнопкой мыши свой проект, выберите «Создать» -> «Класс» и введите «IntentIntegrator» в качестве имени класса.

Остальные параметры вы можете оставить без изменений.

Создав класс, сделайте то же самое, но назовите его «IntentResult».



Распознавание штрих-кодов Android

Скопируйте код из обоих классов библиотеки и затем вставьте его в созданные классы.



Распознавание штрих-кодов Android

Теперь вы можете подключать файлы к основному классу

import com.google.zxing.integration.android.IntentIntegrator; import com.google.zxing.integration.android.IntentResult;

Давайте вернемся на минутку и включим следующие файлы.

Обратите внимание, что Eclipse, возможно, уже подключил их для вас.



import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.Toast;

Изучите содержание двух занятий.

Изучив их, вы обнаружите, что они не читают код. Эти два класса представляют собой просто интерфейсы, обеспечивающие доступ к функциям сканирования.



Сканирование



Шаг 1
Давайте реализуем сканирование, когда пользователь нажимает на нашу кнопку.

В основном файле приложения есть метод onCreate, который должен выглядеть примерно так

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }

Перед этой функцией создайте следующие переменные, которые будут хранить нашу кнопку и два текстовых поля, созданных в шаблоне.



private Button scanBtn; private TextView formatTxt, contentTxt;

После существующего кода в onCreate добавьте строки, которые будут инициализировать переменные.



scanBtn = (Button)findViewById(R.id.scan_button); formatTxt = (TextView)findViewById(R.id.scan_format); contentTxt = (TextView)findViewById(R.id.scan_content);

Теперь давайте добавим обработчик кликов

scanBtn.setOnClickListener(this);

Давайте расширим класс, чтобы объявить интерфейс OnClickListener.

public class MainActivity extends Activity implements OnClickListener



Шаг 2
Теперь мы можем ответить на нажатие кнопки, запустив процесс сканирования.

Добавим метод onClick

public void onClick(View v){ //respond to clicks }

Проверяем, была ли нажата кнопка сканирования

if(v.getId()==R.id.scan_button){ //scan }

Внутри блока с условием мы создадим экземпляр класса IntentIntegrator, который мы импортировали.



IntentIntegrator scanIntegrator = new IntentIntegrator(this);

Теперь давайте вызовем процедуру, которая начнет сканирование

scanIntegrator.initiateScan();

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

Если его там нет, вам будет предложено начать загрузку.

Результат сканирования будет возвращен в приложение.



Обработка результатов сканирования



Шаг 1
Сканер запустится при нажатии кнопки.

Результат сканирования затем будет возвращен методу onActivityResult. Давайте добавим это в наш код

public void onActivityResult(int requestCode, int resultCode, Intent intent) { //retrieve scan result }

Внутри функции мы попробуем обработать результат

IntentResult scanningResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);



Шаг 2
Как и в случае с любыми другими данными, полученными от другого приложения, было бы неплохо проверить, что результат не пуст. Мы продолжим только в том случае, если получим правильный результат.

if (scanningResult != null) { //we have a result }

Если мы не получили результат сканирования (например, пользователь отменил сканирование), то мы просто выведем сообщение

else{ Toast toast = Toast.makeText(getApplicationContext(), "No scan data received!", Toast.LENGTH_SHORT); toast.show(); }

Вернемся к блоку с условием, разберемся, что нам вернула библиотека.

Объект Intent Result имеет метод, который предоставляет результат сканирования.

Получить результат сканирования в виде строки

String scanContent = scanningResult.getContents();

Также мы получаем представление штрих-кода

String scanFormat = scanningResult.getFormatName();



Шаг 3
Теперь в нашем приложении есть вся информация, необходимая для отображения.

В нашей статье мы просто покажем его пользователю.



formatTxt.setText("FORMAT: " + scanFormat); contentTxt.setText("CONTENT: " + scanContent);

Запустите наше приложение на реальном устройстве, а не на эмуляторе, чтобы увидеть, как работает функция распознавания штрих-кода.

Попробуйте отсканировать штрих-код с книги или любого другого товара.

Результаты сканирования

Распознавание штрих-кодов Android



Заключение

В этой статье мы узнали, как сканировать штрих-код с помощью ZXing. В собственных приложениях после получения информации вы, скорее всего, захотите ее обработать, например, если в штрих-коде есть URL, то перейти по нему и т.п.

Теги: #barcode #Android #zxing #разработка Android

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.