Как читать 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 > < 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 и многому другому, см. Полный курс подготовки к собеседованию .