Android

Generar códigos QR con Android y QRGen

Haciendo un creador de códigos QR en Android gracias a QRGen

Ya vimos cómo leer códigos QR de manera programada con Android; ahora veamos el proceso “inverso”: programar una aplicación que genera un código QR a partir de una cadena de datos.

Con el generador que haremos será posible mostrar directamente el código QR generado o guardarlo en un lugar de nuestro teléfono.

Todo lo que haremos será usar la librería de QRGen y combinarla con Android; en este tutorial mostraré paso a paso cómo incluirla en Android Studio, algunos ejemplos de uso y una aplicación que ejemplifica todo eso.

Aplicación final

Para ejemplificar y mostrar que todo esto funciona, he creado una app en donde introduces el texto y puedes generar un código QR para mostrarlo directamente en la aplicación o guardar el código QR como imagen PNG en el dispositivo.

Así se ve al generar un código QR que tiene la dirección de mi sitio web:

Mostrar código QR en ImageView de Android

Y aquí está el QR como imagen que se guardó en mi dispositivo:

Código QR generado con app de Android programada por nosotros

Por cierto, para las versiones de Android 6 y superiores, se debe pedir permiso para escribir en tiempo de ejecución.

Código fuente y descargas

Si quieres ver el código fuente de la app, visita el repositorio en GitHub. Como siempre te digo, fíjate en la actividad principal, el layout principal y el manifiesto.

Para descargar elige el APK de la página releases.

Instalar y configurar librería

Abre Android Studio, en build.gradle (que dice Project: Nombre de tu proyecto) agrega lo siguiente en repositories:

maven { url "https://jitpack.io" }

De manera que ahora se vea algo así:

Agregar jitpack a Android Studio

Después de eso, vamos a build.gradle que dice (Module: app) y agrega lo siguiente al apartado de dependencies:

    implementation 'com.github.kenglxn.QRGen:android:2.5.0'

Cabe mencionar que la versión puede cambiar, visita el repositorio de la librería por si hay otras instrucciones. Como referencia aquí dejo la imagen de cómo se ve en mi caso:

Agregar dependencia de QRGen en Android

Arriba debió aparecer una sugerencia de que sincronices el proyecto porque el archivo de gradle ha cambiado, haz click en Sync now:

Sincronizar gradle

Esperamos a que termine y ahora sí ya podemos programar en Java el generador de códigos.

Uso básico del generador de códigos QR

Mostraré un ejemplo básico para que puedas adaptarlo a tus necesidades, y más abajo pondré ejemplos y una app.

Mostrar código en ImageView

Incluye o importa a QRCode con lo siguiente:

import net.glxn.qrgen.android.QRCode;

Después de eso puedes obtener una imagen BitMap (para ponerla en un ImageView) así:

String texto = "El contenido del código QR";
Bitmap bitmap = QRCode.from(texto).bitmap();
// Suponiendo que tienes un ImageView con el id ivCodigoGenerado
ImageView imagenCodigo = findViewById(R.id.ivCodigoGenerado);
imagenCodigo.setImageBitmap(bitmap);

Se llama al método estático QRCode.from con una cadena como argumento, y luego de eso se llama al método bitmap, es algo así como unos métodos encadenados.

Con ese bitmap podemos hacer lo que se requiera, en este caso se pone en la vista de un ImageView.

Guardar código como imagen PNG

Si lo que quieres es guardar la imagen en el almacenamiento externo, primero lee este tutorial sobre los permisos de Android para solicitar permiso de escritura en el almacenamiento externo.

Luego de ello, cuando tengas los permisos concedidos, el código es el siguiente:

// Crear stream del código QR
ByteArrayOutputStream byteArrayOutputStream = QRCode.from(texto).stream();
// E intentar guardar
FileOutputStream fos;
try {
    // Guardar en el almacenamiento externo con el nombre de "codigo.png"
    fos = new FileOutputStream(Environment.getExternalStorageDirectory() + "/codigo.png");
    byteArrayOutputStream.writeTo(fos);
    Toast.makeText(MainActivity.this, "Código guardado", Toast.LENGTH_SHORT).show();
} catch (FileNotFoundException e) {
    // Nota: aquí indica al usuario que algo salió mal
    e.printStackTrace();
} catch (IOException e) {
    // Nota: aquí indica al usuario que algo salió mal
    e.printStackTrace();
}

Se obtiene un stream igualmente llamando a QRCode.from(texto).stream(), más tarde se escribe en la raíz del almacenamiento externo con el nombre de codigo.png.

El tamaño y calidad del código QR

No sé cuál es el tamaño por defecto de cada código generado por la librería, pero podemos cambiarlo antes de llamar a stream o bitmap usando withSize. Por ejemplo:

QRCode.from(texto).withSize(anchura, altura).bitmap()

Lo de arriba es para obtener un BitMap, y lo siguiente para un stream:

QRCode.from(texto).withSize(anchura, altura).stream()

Por cierto, recuerda que tanto anchura como altura deben ser enteros.

Conclusiones

Así de fácil es generar códigos QR con Android. Si quieres guardar los datos en una base de datos, mira este CRUD de SQLite con Android que hice hace algún tiempo; podrías recuperar los registros y mostrarlos más tarde.

¿Quieres aprender más sobre Android o Java? mira más cosas sobre Android o sobre Java que he escrito.

No olvides que la aplicación es open source, y que puedes descargarla en la página de releases.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

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.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

  • El método setImageBitmap me aparece en letras rojas y no lo reconoce, por lo cuál me salta un error al querer compilar la app. ¿Qué puedo hacer?

  • Hola, espero puedas ayudarme, no he podido guardar la imagen con el código que muestras ya que entra aquí:

    catch (FileNotFoundException e) {
    // Nota: aquí indica al usuario que algo salió mal
    e.printStackTrace();

    Creo yo que es porque mi celular no tiene memoria externa, ¿hay alguna manera de guardarlo en la memoria interna?

  • Hola, soy novato en desarrollo con android studio, estoy intentando aplicar este que enseñas en el post, pero me da un error en la sentencia para setear la variable imageview al la vista, me dice que es esperado un identificador en la línea imagenCodigo.setImageBitmap(bitmap); y pinta de rojo setImageBitmap. Estoy usando Android Studio 3.6.1
    Si agradece algún comentario me pueda ayudar. Saludos !

    • Perdón, no aclaré que es al momento de generar el código QR el error, lo de guardar aun no llegue.
      Gracias!

      • Podrías poner tu código en un gist? y subir una captura de cómo se ve el error?
        Saludos

  • comienzo en android y este tema me llamo la atencion el codigo esta muy corto y entendible solo tengo una duda al momento de guardar los qr por alguna razon no los puedo ver en la galeria que solucion puede haber en ello?

    • Tal vez no está pidiendo permisos de escritura en tiempo de ejecución, le recomiendo revisar el código fuente de la app de ejemplo o mi post sobre la solicitud de permisos
      Recuerde que el código será guardado en la raíz del almacenamiento, y no en una carpeta o subcarpeta
      Saludos

Entradas recientes

Servidor HTTP en Android con Flutter

El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…

4 días hace

Imprimir automáticamente todos los PDF de una carpeta

En este post te voy a enseñar a designar una carpeta para imprimir todos los…

5 días hace

Guía para imprimir en plugin versión 1 desde Android

En este artículo te voy a enseñar la guía para imprimir en una impresora térmica…

1 semana hace

Añadir tasa de cambio en sistema de información

Hoy te voy a mostrar un ejemplo de programación para agregar un módulo de tasa…

2 semanas hace

Comprobar validez de licencia de plugin ESC POS

Los usuarios del plugin para impresoras térmicas pueden contratar licencias, y en ocasiones me han…

2 semanas hace

Imprimir euro € en impresora térmica

Hoy voy a enseñarte cómo imprimir el € en una impresora térmica. Vamos a ver…

4 semanas hace

Esta web usa cookies.