Capturar, generar códigos de barras, QR y otros en Android

Usaremos ZXing para poder capturar y generar códigos de barras, códigos QR entre otros desde nuestras aplicaciones Android.

¿Qué es ZXing?

ZXing es una librería procesadora de imágenes multi-formato en 1D/2D y de código abierto. Actualmente es capaz de reconocer los formatos UPC-A, UPC-E, EAN-8, EAN-13, Códigos 39, 93, 128, ITF, Codabar, RSS-14 (en todas sus variantes), Matriz de datos (Data Matrix), Aztec, PDF 417 y por supuesto los populares códigos QR.

Configuración

Para poder usar esta librería en nuestra aplicación Android, la forma mas sencilla es usando Gradle, en el archivo build.gradle en la sección dependencies colocamos lo siguiente:

compile 'com.google.zxing:core:3.2.1'  
compile 'com.google.zxing:android-integration:3.2.1'  

Luego sincronizamos el proyecto y eso es todo, ya podemos usar las funciones de esta librería.

Capturar códigos

Para leer cualquier tipo de código ZXing cuenta con la siguiente Activity que se puede personalizar un poco de forma sencilla.

device-2016-03-26-204943

Iniciamos la captura usando las siguientes lineas de código, personalizando el ancho y alto del area de captura (un cuadrado puede ser bueno para un código QR), además de un texto ubicado en la parte inferior.

IntentIntegrator integrator = new IntentIntegrator(this);

integrator.addExtra("SCAN_WIDTH", 800);  
integrator.addExtra("SCAN_HEIGHT", 800);  
integrator.addExtra("PROMPT_MESSAGE", "Busque un código para escanear");

integrator.initiateScan();  

Para mostrar la información capturada debemos de colocar el siguiente método en la Activity que originó la captura. Podemos obtener el contenido del código y también el tipo de código leído.

public void onActivityResult(int requestCode, int resultCode, Intent intent) {  
    IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
    if (scanResult != null) {
        System.out.println("Información encontrada");
        System.out.println(scanResult.getContents());
        System.out.println(scanResult.getFormatName());
    }
}

Una vez obtenida la información el siguiente trabajo es interpretarla haciendo las operaciones necesarias con un String en Java, dejamos eso fuera del tutorial por ahora.

Generar códigos

Con ZXing podemos generar varios tipos de códigos QR, el resultado se muestra en una nueva Activity de la siguiente forma:

device-2016-03-26-211838

Generar código QR de contacto

Bundle bundle = new Bundle();  
bundle.putString(ContactsContract.Intents.Insert.NAME, "Daniel Alvarez");  
bundle.putString(ContactsContract.Intents.Insert.PHONE, "77242424");  
bundle.putString(ContactsContract.Intents.Insert.EMAIL, "daniel@alvarez.tech");

IntentIntegrator integrator = new IntentIntegrator(this);  
integrator.addExtra("ENCODE_DATA", bundle);  
integrator.shareText(bundle.toString(), "CONTACT_TYPE");  

Generar código QR de una localización

Bundle bundle = new Bundle();  
bundle.putFloat("LAT", 40.829208f);  
bundle.putFloat("LONG", -74.191279f);

IntentIntegrator integrator = new IntentIntegrator(this);  
integrator.addExtra("ENCODE_DATA", bundle);  
integrator.shareText(bundle.toString(), "LOCATION_TYPE");  

Generar código QR de una URL

IntentIntegrator integrator = new IntentIntegrator(this);  
integrator.shareText("http://alvarez.tech", "TEXT_TYPE");  

Los tipos de código que se pueden generar son CONTACTTYPE, LOCATIONTYPE, TEXTTYPE, EMAILTYPE, PHONETYPE y SMSTYPE.

Podemos descargar el proyecto de ejemplo desde Github y consultar cualquier duda en los comentarios.

github.com/alvareztech/ZXing-Sample-Android

Daniel Alvarez

Software engineer, developer and producer of native mobile applications for Android and iOS, Angular, Firebase. Teacher. Speaker. Creating bots.