ZXing para Kotlin: Guía completa para escanear códigos QR y códigos de barras
En el mundo actual de aplicaciones móviles y automatización de procesos, la capacidad de leer información rápidamente desde códigos QR y códigos de barras se ha convertido en un estándar de facto. La librería ZXing (se pronuncia "zebra crossing") es una potente herramienta de código abierto que permite a los desarrolladores integrar fácilmente funciones de reconocimiento y generación de códigos unidimensionales (EAN, UPC, Code 128) y bidimensionales (QR, Data Matrix, Aztec) en sus aplicaciones.
Esta guía está dirigida a desarrolladores que usan Kotlin y quieren dominar ZXing desde la instalación básica hasta la creación de escáneres avanzados con optimización de rendimiento. Analizaremos no solo los casos de uso estándar, sino también los detalles técnicos que suelen causar errores a los principiantes.
1. ¿Qué es ZXing y para qué sirve?
ZXing es una librería de procesamiento de imágenes especializada en decodificar y codificar códigos de barras. Fue creada por Google y cuenta con el respaldo de una gran comunidad. Su principal ventaja es la multiplataforma (Java/Kotlin, C++, JavaScript, Python) y el soporte para una amplia variedad de formatos: desde los clásicos códigos QR hasta códigos industriales específicos como PDF417.
¿Por qué usar ZXing en Kotlin? Primero, porque es el estándar de oro en el desarrollo para Android. Segundo, la librería ofrece clases listas para trabajar con la cámara (a través de CameraX o Camera2), lo que evita tener que escribir código de bajo nivel para capturar video. Tercero, ZXing no solo funciona con video en tiempo real, sino también con imágenes estáticas (archivos de la galería), lo que amplía los casos de uso: desde escanear tickets hasta reconocer códigos en empaques de productos en logística.
2. Instalación
Para Kotlin (Android), la instalación se realiza mediante el sistema de compilación Gradle. Agrega las siguientes dependencias en el archivo build.gradle (Module: app):
dependencies {
// Librería principal de ZXing
implementation("com.google.zxing:core:3.5.3")
// Módulo adicional para trabajar con la cámara (recomendado)
implementation("com.journeyapps:zxing-android-embedded:4.3.0")
}
Si usas Kotlin Multiplatform o Kotlin puro del lado del servidor (Ktor), solo necesitarás el módulo core:
implementation("com.google.zxing:core:3.5.3")
Para aplicaciones de escritorio (JVM), agrega la dependencia en Maven o Gradle de forma similar. Después de sincronizar el proyecto, la librería estará lista para usar.
3. Inicio rápido: ejemplo mínimo funcional
La forma más sencilla de probar ZXing es ejecutar la Activity integrada para escanear. Para ello, basta con lanzar un Intent. A continuación, se muestra el código mínimo para una Activity de Android en Kotlin:
import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.journeyapps.barcodescanner.ScanContract
import com.journeyapps.barcodescanner.ScanOptions
class MainActivity : AppCompatActivity() {
// Registramos el contrato para lanzar el escáner
private val barcodeLauncher = registerForActivityResult(ScanContract()) { result ->
if (result.contents == null) {
Toast.makeText(this, "Escaneo cancelado", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this, "Resultado: ${result.contents}", Toast.LENGTH_LONG).show()
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Configuración de opciones de escaneo
val options = ScanOptions()
options.setDesiredBarcodeFormats(ScanOptions.QR_CODE) // Solo QR
op