Integrar Barcode Scanner en nuestra aplicación Android

Integrar Barcode Scanner en nuestra aplicación Android


0. Índice de contenidos.


1. Introducción

En este tutorial, vamos a ver como podemos leer códigos qr desde nuestra aplicación de Android.

Para quien no conozca qué son los códigos QR, comentaré de forma reducida que, son códigos de barra en los que cabe bastante más información que en los códigos de barra tradicionales. Seguramente os sonará la siguiente imagen.

Para realizar la lectura de los códigos, vamos a utilizar una aplicación que problablemente ya conoceréis: Barcode Scanner, que para mi gusto y con permiso de Goggles (aunque ésta es capaz de reconocer objetos), es la mejor aplicación para leer códigos de este tipo.


2. Entorno

  • Hardware
    • Mackbook Pro
      • Intel Core i7 2Ghz
      • 8GB RAM
      • 500GB HD
      • Sistema Operativo: Mac OS X (10.8.2)
    • Galaxy Nexus
      • Android 4.1.1 (Jelly Bean).
  • Software
    • IntelliJ 11 Ultimate

3. Desarrollo de la aplicación.

Manos a la obra:

El primer detalle es que no tenemos que indicar ningún permiso en el fichero AndroidManifest.xml de la aplicación, ya que nuestra aplicación no va a acceder a ningún recurso, sólo lanzaremos un intent que hará el trabajo por nosotros. Nota: Si vuestra aplicación necesita acceder a la cámara o a internet, tendréis que añadir igualmente los permisos en el AndroidManifest.xml.

El segundo paso es agregar un par de clases a nuestro proyecto. Estas dos clases son:

Y ahora os voy a poner ya el código, para que veáis de qué forma tan sencilla podemos leer un código qr :).

Empezamos por el código de la vista:

Si os fijáis en el layout, tenemos un botón (ImageButton) y dos TextView. El botón lo usaremos para iniciar el intent que lanzará la aplicación encargada de leer el qr-code. Los dos TextViews los usaremos para mostrar la lectura.

Y terminos con el código que ejecuta la acción. Aquí esta toda la clase del Activity (excepto los imports).

Lo que hay que destacar de este código están en las líneas:

  • 15: Lo que hace es inicializar el Intent que las propiedades que necesita para que se ejecute Barcode Scanner. Al no pasar parámetros, intentará leer todos los tipos diferentes de códigos de barra que es capaz. Además es importante que especifiquemos nuestro activity, para que luego podamos gestionar el resultado de la lectura.
  • 20 a 24: Cuando llamamos a initiateScan(), lo que hace es empezar un Activity con startActivityForResult. Entonces si redefinimos el método onActivityResult, podemos gestionar el resultado. En este caso instanciamos un IntentResult parseando el intent que hemos recibido. Esta clase nos ayuda a extraer el resultado del intent.
  • 28: Extraemos el resultado del IntentResult con scanResult.getContents() y scanResult.getFormatName() y lo pintamos en la pantalla.

Como diría un profesor que tuve de la carrera: Facilote, facilote!! 😛

Para que veáis que no os engaño, os muestro unas capturas del proceso :)


4. Detalles a tener en cuenta.

La implementación que hemos hecho, nos obliga a tener instalado Barcode Scanner en el dispositivo. Si intentamos ejecutar nuestra aplicación, nos saldrá un alert indicando que no lo tenemos instalado y preguntándonos si lo queremos instalar. ¿Que ocurre si tenemos otras aplicaciones que son capaces de leer códigos qr y no queremos instalar otra más?

El comportamiento de la aplicación que acabamos de hacer se debe a la clase que hemos utilizado. Si lo que queremos es que el teléfono nos muestre una lista de las aplicaciones disponibles, tendremos que hacerlo de la siguiente manera.

y

Lo que hemos hecho es comentar la clase que usábamos para lanzar el intent y hemos creado el nuestro. El problema de esto es que tenemos que gestionar nosotros que ocurre en caso de qué no haya ninguna aplicación disponible y parsear nosotros el intent devuelto por la aplicación.

Os muestro una captura para que veáis lo que mostraría en mi caso


5. Conclusiones.

Si la aplicación que estamos desarrollando, necesita recibir datos del exterior, quizás sea una opción el que los recoja de códigos qr, ya que hemos visto que con muy poco esfuerzo, nuestra aplicación será totalmente capaz de leer estos códigos.




Para cualquier comentario, duda o sugerencia, tenéis el formulario que aparece a continuación.


Un saludo.