Lector de código de barras con Android

Leer código de barras con Android y ZXing (programación de app)

En este post voy a enseñarte cómo leer o escanear códigos de barras con Android usando la librería de Zebra Crossing (ZXing) con Java.

Además de que se permitirán leer códigos de barras también se podrán escanear códigos QR.

Lector de código de barras con Android
Lector de código de barras con Android

La app que vamos a programar será compatible con versiones de Android 4.4 y superiores; también vamos a manejar los permisos de acceso a la cámara en tiempo de ejecución y en el manifiesto.

Al final tendremos una app que lanza el lector de códigos de barras y devuelve el texto leído en forma de cadena.

Artículos recomendados

Anteriormente hicimos un lector de códigos QR con Android, míralo aquí. En esta app vamos a manejar los permisos en tiempo de ejecución para la cámara, así que mira el post en donde explicamos a fondo cómo solicitar permisos en tiempo de ejecución.

Código en GitHub y APK

A través del post explicaré los puntos más importantes, pero si quieres ver el código completo sobre cómo queda cada archivo mira el proyecto en mi GitHub.

También puedes probar la app descargándola dese el apartado releases. No te preocupes, no dañará tu dispositivo.

La librería

Como lo dije anteriormente, la librería será ZXing cuyo repositorio está aquí. Nosotros vamos a usar un “port” del usuario dm77 ya que facilita la integración de la librería agregando unos repositorios.

Para integrarla debemos modificar el archivo build.gradle que dice Module:app

Si no tiene el apartado repositories agrégalo y dentro de él coloca jcenter()

En el apartado dependencies agrega una línea que diga:

implementation 'me.dm7.barcodescanner:zxing:1.9.13'

Al final debe quedar como en la imagen (puede variar de acuerdo a tus dependencias):

Archivo gradle implementando barcodescanner zxing
Archivo gradle implementando barcodescanner zxing

Después de haber puesto  estas líneas seguramente se te pedirá que sincronices el proyecto:

Sincronizar proyecto
Sincronizar proyecto

Si se sincroniza bien, podemos continuar. Si no, verifica que hayas colocado todo de manera correcta.

Permisos

Se necesitan los permisos para acceder a la cámara. En el manifiesto agrega la siguiente línea:

<uses-permission android:name="android.permission.CAMERA" />

Dentro de la actividad principal también vamos a solicitar permisos en tiempo de ejecución, pues son necesarios a partir de Android 6.

Solicitar permisos de acceso a la cámara para leer código de barras con Android
Solicitar permisos de acceso a la cámara para leer código de barras con Android

Actividad principal

En la actividad principal pondremos un botón que lanzará una actividad que leerá el código de barras y regresará lo que haya leído.

Actividad principal
Actividad principal

Podemos integrar el lector de distintas maneras pero yo lo haré de forma que ocupe toda una actividad para separar conceptos y lógica.

Layout

El diseño queda así:

Tiene un botón (Button) que lanza la actividad y dos TextView; en uno se muestra la dirección de mi sitio web y en el otro el código que se haya leído.

Código Java de actividad principal

En el código de Java simplemente agregamos listeners al botón, además de solicitar los permisos y sobrescribir a onAcitivityResult.

Este último método será llamado cuando se escanee el código y se finalice la otra actividad, pero trayendo resultados.

Gran parte de la lógica se centra en los permisos; si no los entiendes mira el post en donde se explican a fondo.

Cuando se hace click en el botón, si se han concedido los permisos, se lanza una nueva actividad con startActivityForResult.

Actividad para leer el código de barras

En esta actividad vamos a comenzar a escanear el código con la cámara del dispositivo. Cuando se logre escanear un código vamos a cerrar la actividad con el método finish pasándole a la actividad el texto que leímos.

Lector de código de barras con Android
Lector de código de barras con Android

Lo he hecho de esta manera para separar conceptos, pero podrían implementarse otras formas; todo es cuestión de tus necesidades.

Layout

El layout tiene únicamente un ConstraintLayout:

Código Java que lee el código de barras

Aquí es en donde la magia sucede. Manejamos los ciclos de vida de la actividad para informar al escaner que se detenga o resuma.

Estamos implementando la interfaz ZXingScannerView.ResultHandler así que debemos sobrescribir el método handleResult.

En palabras simples: cuando el código sea escaneado se pasará el resultado llamando a handleResult, y podremos obtener información a través del Result, por ejemplo, llamando a getText.

He dejado los comentarios necesarios. Cuando el lector escanea un código podemos seguir escaneando si lo requerimos, aunque yo lo detengo porque cierro la actividad.

Regresar a actividad principal

Después de escanear regresamos a la actividad principal y si todo va bien ponemos el código leído en un TextView:

Código de barras leído con Android y ZXing
Código de barras leído con Android y ZXing

Podríamos manejar el código de distintas maneras, pero lo he hecho simple. Una vez que lo tenemos como un String sus aplicaciones son infinitas.

Conclusión

Así es como podemos leer un código de barras con Android y la librería ZXing de una forma sencilla. La librería proporciona más métodos que puedes leer en la documentación oficial.

Intenté hacer este post lo más sencillo completo, si tienes dudas puedes dejarlas en los comentarios.

Te invito a leer más sobre Android aquí.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

10 comentarios en “Leer código de barras con Android y ZXing (programación de app)”

  1. Hola, tengo una webapp que hace esto mismo.
    El problema es que al generar un apk y luego abrirlo desde el celular, al momento de abrir la camara para el escaneo del código en lugar de aparecer el video me aparece una imagen como de reproductor (cuando no se encuentra el video).
    Estimo que la web que la web que utilizo para generar el apk no habilita los permisos de la cam. Alguna idea para solucionar esto?
    Conocés alguna web que genere un apk y que de la opción de habilitar permisos?
    Gracias de antemano!

    1. Hola. ¿Por qué debería existir un botón para tomar una foto? se está leyendo un código de barras, no tomando una foto. Le invito a descargar la demo para entender a lo que me refiero
      Saludos 🙂

  2. Gracias por este magnifico ejemplo.

    Yo había implementado un escaner de códigos de barra usando la misma librería, pero si quería cancelar el escaneo no podía, incluso al usar el botón back la app se cerraba en lugar de regresar a la activity que quería.

    Con tu ejemplo obtuve ideas para solucionar mi problema, muchas gracias.

Dejar un comentario