Как читать QR-код с помощью библиотеки Zxing в Android?

Опубликовано: 30 Ноября, 2021

Zxing означает Zebra Crossing, это один из самых популярных API с открытым исходным кодом для интеграции обработки кода QR (Quick Response). Это библиотека обработки изображений штрих-кода, реализованная на Java, с портами на другие языки. Он поддерживает одномерные штрих-коды, промышленные одномерные и двухмерные штрих-коды. Google использует ZXing для поиска в Интернете для получения миллионов штрих-кодов, индексируемых в Интернете. Он также составляет основу приложения «Сканер штрих-кода» для Android и объединен с Поиском продуктов и книгами Google.

Note: To read QR code using CAMView Library you may refer to How to Read QR Code using CAMView Library in Android?

QR код

Это аббревиатура от Quick Response Code . Он представляет собой комбинацию белых и черных квадратов и легко читается с помощью QR-сканера . Обычно он использует четыре режима кодирования

  • Числовой
  • Буквенно-цифровой
  • Байт / Двоичный
  • Кандзи

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

Пошаговая реализация

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

Шаг 1. Создайте новый проект

Чтобы создать новый проект в Android Studio, см. Как создать / запустить новый проект в Android Studio. Обратите внимание, что выберите Java в качестве языка программирования.

Note: Choose API 24 and onwards as Minimum SDK

Шаг 2. Добавление зависимостей

Чтобы использовать библиотеку Zxing в нашем приложении, нам нужно добавить ее зависимость в файл gradle нашего приложения. Для добавления зависимости Перейдите в Gradle Scripts> build.gradle (Module: app) и добавьте следующие зависимости. После добавления зависимости вам нужно нажать « Синхронизировать сейчас».

dependencies {

   implementation ‘com.journeyapps:zxing-android-embedded:4.1.0’



}

Прежде чем двигаться дальше, давайте добавим несколько цветовых атрибутов, чтобы улучшить панель приложения. Перейдите в app> res> values> colors.xml и добавьте следующие атрибуты цвета.

XML

< resources >
< color name = "colorPrimary" >#0F9D58</ color >
< color name = "colorPrimaryDark" >#16E37F</ color >
< color name = "colorAccent" >#03DAC5</ color >
</ resources >

Шаг 3: Создание файла макета activity_main.xml

На этом этапе мы создадим макет нашего приложения, в котором есть кнопка для сканирования и два TextView: один для содержимого сообщения QR-кода, а второй - для формата отсканированного сообщения. Перейдите в app> res> layout> activity_main.xml и добавьте следующий фрагмент кода.

XML

<? xml version = "1.0" encoding = "utf-8" ?>
< LinearLayout
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:orientation = "vertical"
tools:context = ".MainActivity" >
< TextView
android:id = "@+id/textContent"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_gravity = "center"
android:layout_margin = "10dp"
android:text = "messageContent" />
< TextView
android:id = "@+id/textFormat"
android:text = "messageFormat"
android:layout_width = "wrap_content"
android:layout_gravity = "center"
android:layout_margin = "10dp"
android:layout_height = "wrap_content" />
< Button
android:id = "@+id/scanBtn"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_margin = "10dp"
android:backgroundTint = "#0F9D58"
android:layout_gravity = "center"
android:text = "Scan" />
</ LinearLayout >

Шаг 4: Работа с файлом MainActivity.java

На этом этапе мы будем работать с файлом MainActivity.java, в котором мы сначала инициализируем кнопку и два TextView. В поведении кнопки onClick () мы создаем объект класса IntentIntegrator, который используется для вызова метода initiateScan () для процесса сканирования. После этого в методе onActivityResult () мы проверим, является ли отсканированное сообщение нулевым, а затем отметим сообщение как «Отменено», в противном случае мы установим отсканированное сообщение и его формат поверх TextViews.

Ява

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;
// implements onClickListener for the onclick behaviour of button
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
Button scanBtn;
TextView messageText, messageFormat;
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// referencing and initializing
// the button and textviews
scanBtn = findViewById(R.id.scanBtn);
messageText = findViewById(R.id.textContent);
messageFormat = findViewById(R.id.textFormat);
// adding listener to the button
scanBtn.setOnClickListener( this );
}
@Override
public void onClick(View v) {
// we need to create the object
// of IntentIntegrator class
// which is the class of QR library
IntentIntegrator intentIntegrator = new IntentIntegrator( this );
intentIntegrator.setPrompt( "Scan a barcode or QR Code" );
intentIntegrator.setOrientationLocked( true );
intentIntegrator.initiateScan();
}
@Override
protected void onActivityResult( int requestCode, int resultCode, @Nullable Intent data) {
super .onActivityResult(requestCode, resultCode, data);
IntentResult intentResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
// if the intentResult is null then
// toast a message as "cancelled"
if (intentResult != null ) {
if (intentResult.getContents() == null ) {
Toast.makeText(getBaseContext(), "Cancelled" , Toast.LENGTH_SHORT).show();
} else {
// if the intentResult is not null we'll set
// the content and format of scan message
messageText.setText(intentResult.getContents());
messageFormat.setText(intentResult.getFormatName());
}
} else {
super .onActivityResult(requestCode, resultCode, data);
}
}
}

Выход:

Вниманию читателя! Не прекращайте учиться сейчас. Ознакомьтесь со всеми важными концепциями Java Foundation и коллекций с помощью курса "Основы Java и Java Collections" по доступной для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .