Как читать QR-код с помощью библиотеки Zxing в Android?
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>    <colorname="colorPrimary">#0F9D58</color>    <colorname="colorPrimaryDark">#16E37F</color>    <colorname="colorAccent">#03DAC5</color></resources> | 
Шаг 3: Создание файла макета activity_main.xml
На этом этапе мы создадим макет нашего приложения, в котором есть кнопка для сканирования и два TextView: один для содержимого сообщения QR-кода, а второй - для формата отсканированного сообщения. Перейдите в app> res> layout> activity_main.xml и добавьте следующий фрагмент кода.
XML
| <?xmlversion="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.
Ява
| importandroid.content.Intent;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.Button;importandroid.widget.TextView;importandroid.widget.Toast; importandroidx.annotation.Nullable;importandroidx.appcompat.app.AppCompatActivity; importcom.google.zxing.integration.android.IntentIntegrator;importcom.google.zxing.integration.android.IntentResult; // implements onClickListener for the onclick behaviour of buttonpublicclassMainActivityextendsAppCompatActivityimplementsView.OnClickListener {    Button scanBtn;    TextView messageText, messageFormat;     @Override    protectedvoidonCreate(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    publicvoidonClick(View v) {        // we need to create the object        // of IntentIntegrator class        // which is the class of QR library        IntentIntegrator intentIntegrator =newIntentIntegrator(this);        intentIntegrator.setPrompt("Scan a barcode or QR Code");        intentIntegrator.setOrientationLocked(true);        intentIntegrator.initiateScan();    }     @Override    protectedvoidonActivityResult(intrequestCode,intresultCode,@NullableIntent 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 и многому другому, см. Полный курс подготовки к собеседованию .