¿Qué es Zxing y cómo usarlo para escanear códigos QR en Android?

| Última modificación: 28 de octubre de 2024 | Tiempo de Lectura: 4 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

Muchos piensan que integrar la funcionalidad de escaneo de códigos QR en su aplicación de Android es un proceso super complejo y lo dejan de lado. La realidad es que, con Zxing, una librería bastante reconocida y recomendada, podrás hacerlo sin mayores configuraciones. Aquí te explicaré qué es y cómo usarla paso a paso.

qué es Zxing

¿Qué es Zxing?

Zxing, que viene de Zebra Crossing, es una librería pensada para leer y entender muchos tipos de códigos de barras, no solo los populares códigos QR. Aunque es famosa por escanear estos códigos, también reconoce otros formatos, como UPC-A, Code 39, Data Matrix o Aztec, lo que la convierte en una gran herramienta para cualquier aplicación que necesite leer diferentes tipos de códigos.

Para Android, Zxing tiene una versión mejorada llamada Zxing Android Embedded. Esta versión se encargar de gestionar permisos y manejar la cámara de manera sencilla, lo que ayuda a que se integre mejor y funcione de forma más natural en las aplicaciones Android.

Instalación de Zxing en un proyecto Android

Antes de comenzar, es necesario que configures las dependencias de Zxing Android Embedded en el archivo build.gradle de tu proyecto Android.

Paso 1: Añade las dependencias en build.gradle

Primero, decide si tu aplicación será compatible con versiones anteriores a Android SDK 24 (Android 7.0). Para soporte a versiones más antiguas (API 21 en adelante), necesitarás instalar tanto Zxing Android Embedded como la librería base de Zxing:

implementation('com.journeyapps:zxing-android-embedded:4.1.0') { transitive = false }
implementation 'com.google.zxing:core:3.3.0'

Si tu aplicación soporta solo Android SDK 24 o superior, basta con agregar:

implementation 'com.journeyapps:zxing-android-embedded:4.1.0'

Asegúrate también de tener Java 8 configurado en tu proyecto. Dentro de android {} en el archivo build.gradle, añade:

compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}

Una vez hecho esto, sincroniza el proyecto para que las dependencias se integren correctamente.

Paso 2: Configura el AndroidManifest.xml

En este paso, necesitas habilitar la aceleración de hardware para el uso de la cámara.

En el archivo AndroidManifest.xml, dentro de <application>, agrega el atributo android:hardwareAccelerated=”true”:

<application
android:allowBackup="true"
android:hardwareAccelerated="true"
... >
</application>

Si quieres que la vista de escaneo esté en orientación vertical, agrega lo siguiente justo antes de </application>:

<activity
android:name="com.journeyapps.barcodescanner.CaptureActivity"
android:screenOrientation="portrait"
tools:replace="screenOrientation" />

Programando el escáner de QR y códigos de barras con Zxing

Con la configuración completa, vas a programar una aplicación simple que escanee códigos QR. Para esto, crearás una interfaz de usuario sencilla con un botón de escaneo en activity_main.xml:

<Button
android:id="@+id/btnScanner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Escanear código" />

Paso 1: Configura el botón de escaneo

En MainActivity, configura View Binding y añade un setOnClickListener para el botón de escaneo:

private lateinit var binding: ActivityMainBinding

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)

binding.btnScanner.setOnClickListener { initScanner() }
}

Paso 2: Configura la función initScanner

Dentro de la función initScanner, usarás IntentIntegrator para iniciar el escáner de Zxing:

private fun initScanner() {
val integrator = IntentIntegrator(this)
integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE)
integrator.setPrompt("Apunta al código para escanear")
integrator.setTorchEnabled(true)
integrator.setBeepEnabled(true)
integrator.initiateScan()
}

Con esta configuración, Zxing abrirá una vista de escaneo horizontal que reconocerá códigos QR.

🔴 ¿Quieres entrar de lleno al Desarrollo Mobile? 🔴

Descubre el Desarrollo de Apps Móviles Full Stack Bootcamp de KeepCoding. La formación más completa del mercado y con empleabilidad garantizada

👉 Prueba gratis el Bootcamp en Desarrollo de Apps Móviles por una semana

La función setPrompt() permite personalizar el mensaje de la pantalla, setTorchEnabled(true) habilita el uso de la linterna y setBeepEnabled(true) activa un sonido cuando se reconoce un código.

Obtener los resultados del escaneo

Después de iniciar el escáner, necesitas capturar el resultado del código escaneado. Entonces, usarás la función onActivityResult().

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
val result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data)
if (result != null) {
if (result.contents == null) {
Toast.makeText(this, "Escaneo cancelado", Toast.LENGTH_LONG).show()
} else {
Toast.makeText(this, "Código escaneado: " + result.contents, Toast.LENGTH_LONG).show()
}
} else {
super.onActivityResult(requestCode, resultCode, data)
}
}

Con este código, si el usuario escanea un código, el valor aparecerá en pantalla. De no ser así, se mostrará un mensaje indicando que el escaneo ha sido cancelado.

Personaliza el escáner de Zxing

Zxing Android Embedded te ofrece varias opciones de personalización para ajustar la experiencia de escaneo a tus necesidades y haciéndola más amigable para los usuarios. Estas son algunas propiedades útiles de IntentIntegrator:

  • setDesiredBarcodeFormats: Define los formatos de códigos de barras que la aplicación puede escanear.
  • setPrompt: Muestra un mensaje en la pantalla del escáner.
  • setTorchEnabled: Activa el uso de la linterna.
  • setBeepEnabled: Reproduce un sonido cuando se reconoce un código.

Puedes desarrollar aplicaciones móviles con funcionalidades avanzadas como la de Zxing, si te unes al Bootcamp de Desarrollo de Aplicaciones Móviles iOS & Android de KeepCoding. Aquí aprenderás a crear apps profesionales desde cero y a dominar tecnologías de escaneo, conectividad y más. Prepárate para un sector en alta demanda laboral, con excelentes salarios y estabilidad que transformará tu carrera. ¡Únete y da el salto a una nueva vida en el mundo de la programación móvil!

Jose Luis Bustos
Jose Luis Bustos

Lead Software Architect & Coordinador del Bootcamp en Desarrollo de Apps Móviles iOS & Android.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Desarrollo de apps móviles ios & Android

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado