¿Cómo leer el código QR usando Zxing Library en Android?

Zxing significa Zebra Crossing, es una de las API de código abierto más populares para integrar el procesamiento de códigos QR (respuesta rápida) .

Biblioteca

Código QR

Es una abreviatura de Código de respuesta rápida . Es una combinación de cuadrados blancos y negros y se puede leer fácilmente con un escáner QR . Generalmente utiliza cuatro modos de codificación.

  • Numérico
  • Alfanumérico
  • Byte/Binario
  • kanji

Se utiliza para la autenticación y los pagos en línea. qué

Read QR Code using Zxing Library in Android Sample GIF

Implementación paso a paso

En este proyecto, estamos creando una aplicación básica de escáner QR que se utiliza para escanear un código QR y mostrar el resultado en la pantalla.

Paso 1: crear un nuevo proyecto

Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Java como lenguaje de programación.

Nota: Elija API 24 y posteriores como SDK mínimo

Paso 2: Agregar dependencias

Para usar la biblioteca Zxing en nuestra aplicación, debemos agregar su dependencia en el archivo gradle de nuestra aplicación. Para agregar la dependencia, vaya a Gradle Scripts > build.gradle(Module: app) y agregue las siguientes dependencias. Después de agregar la dependencia, debe hacer clic en Sincronizar ahora.

dependencias {

   implementación ‘com.journeyapps:zxing-android-embedded:4.1.0’

}

Antes de continuar, agreguemos algunos atributos de color para mejorar la barra de la aplicación. Vaya a aplicación > res > valores > colores.xml y agregue los siguientes atributos de color. 

XML

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

Paso 3: Creación del archivo de diseño activity_main.xml

En este paso, crearemos el diseño de nuestra aplicación, que tiene un botón para escanear y dos TextView, uno es para el contenido del mensaje del código QR y el segundo es para el formato del mensaje escaneado. Vaya a aplicación > res > diseño > actividad_principal.xml y agregue el siguiente fragmento de código.

XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    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>

Paso 4: trabajar con el archivo MainActivity.java

En este paso, trabajaremos con el archivo MainActivity.java donde primero inicializamos el botón y las dos TextViews . En el comportamiento onClick() del botón, creamos el objeto de la clase IntentIntegrator que se usa para llamar al método initialScan() para el proceso de escaneo. Después de eso, en el método onActivityResult() , verificaremos si el mensaje escaneado es nulo y luego brindaremos un mensaje como «Cancelado», de lo contrario, configuraremos el mensaje escaneado y su formato sobre TextViews.

Java

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);
        }
    }
}

Producción:

Publicación traducida automáticamente

Artículo escrito por ankur035 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *