¿Cómo generar un código QR para una aplicación de Android? [cerrado]


92

Necesito crear un código QR en mi aplicación de Android y necesito una biblioteca o código fuente que me permita crear un código QR en una aplicación de Android.

La biblioteca que necesito debe:

  1. no dejar una marca de agua (como onbarcodebiblioteca)
  2. no use la API del servicio web para crear el código qr (como la biblioteca zxing de Google)
  3. no necesita instaladores de terceros (como QR Droid)

Ya creé dicho código para iPhone (Objective-C) pero necesito una solución rápida para Android hasta que tenga tiempo de hacer mi propio generador de códigos QR. Es mi primer proyecto de Android, por lo que se agradecerá cualquier ayuda.


podría usar zxing en su código abierto
nandeesh

2
zxing no es una API web, en realidad, consulte a continuación
Sean Owen

1
Pruebe mi aplicación de prueba simple para generar mapas de bits QR aquí: stackoverflow.com/a/30529519/165071
Alexander Farber

Respuestas:


68

¿Ha mirado ZXING ? Lo he estado usando con éxito para crear códigos de barras. Puede ver un ejemplo de trabajo completo en la aplicación bitcoin src

// this is a small sample use of the QRCodeEncoder class from zxing
try {
    // generate a 150x150 QR code
    Bitmap bm = encodeAsBitmap(barcode_content, BarcodeFormat.QR_CODE, 150, 150);

    if(bm != null) {
        image_view.setImageBitmap(bm);
    }
} catch (WriterException e) { //eek }

He bifurcado el código abierto de bitcoin de github y lo probé en mis dispositivos Android 2.2, fuerza de aplicación cerrada, ¿hay algún problema?
Roy Lee

Lo siento, no he visto esa aplicación durante más de un año. Como mencionó Sean a continuación, consulte la fuente del codificador zxing aquí: code.google.com/p/zxing/source/browse/trunk#trunk/core/src/com/…
Rob

@Rob, ¿generará un código QR del número definido por el usuario? único número o número con laphabets
Erum

@Erum creará un código de barras para la mayoría de las cadenas alfanuméricas que proporcione
Rob

Use esto: implementación 'me.dm7.barcodescanner: zxing: 1.9.13'
M. Usman Khan

97

con zxing este es mi código para crear QR

 QRCodeWriter writer = new QRCodeWriter();
    try {
        BitMatrix bitMatrix = writer.encode(content, BarcodeFormat.QR_CODE, 512, 512);
        int width = bitMatrix.getWidth();
        int height = bitMatrix.getHeight();
        Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
        for (int x = 0; x < width; x++) {
            for (int y = 0; y < height; y++) {
                bmp.setPixel(x, y, bitMatrix.get(x, y) ? Color.BLACK : Color.WHITE);
            }
        }
        ((ImageView) findViewById(R.id.img_result_qr)).setImageBitmap(bmp);

    } catch (WriterException e) {
        e.printStackTrace();
    }

Trabajó para mi. Fácil de agregar.
Roon13

Gracias. Trabaja para mi.
RoShan Shan

@Stefano ¿Puede generar n no. de código QR único?
Ashish Tiwari

Funcionó como un encanto g88 !! +1 ¿Hay alguna opción en la que pueda agregar algún logo a esto?
Amit

1
para evitar pérdidas de memoria, no olvide administrar la memoria de mapa de bits que está creando Bitmap.createBitmap.
gMale

43

Tal vez este tema antiguo, pero encontré que esta biblioteca es muy útil y fácil de usar

QRGen

ejemplo para usarlo en Android

 Bitmap myBitmap = QRCode.from("www.example.org").bitmap();
ImageView myImage = (ImageView) findViewById(R.id.imageView);
myImage.setImageBitmap(myBitmap);

2
¡Esta es una solución fácil y funcional!
Zohab Ali

5
.bitmap () no se encuentra
Marcel Adel

Debe usar la dependencia de Android: implementation 'com.github.kenglxn.QRGen:android:[version]' e importar la clase QRCode como esta:import net.glxn.qrgen.android.QRCode
anro

2
Error al resolver: com.github.kenglxn.QRGen: android: 2.6.0
M. Usman Khan

2
En su proyecto build.gradle agregue maven {url " jitpack.io "} a allprojects.repositiories
tagy22

18

¡Aquí está mi función simple y funcional para generar un mapa de bits! ¡Solo uso ZXing1.3.jar! ¡También configuré el Nivel de corrección en Alto!

PS: xey están invertidos, es normal, porque bitMatrix invierte xey. Este código funciona perfectamente con una imagen cuadrada.

public static Bitmap generateQrCode(String myCodeText) throws WriterException {
    Hashtable<EncodeHintType, ErrorCorrectionLevel> hintMap = new Hashtable<EncodeHintType, ErrorCorrectionLevel>();
    hintMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); // H = 30% damage

    QRCodeWriter qrCodeWriter = new QRCodeWriter();

    int size = 256;

    ByteMatrix bitMatrix = qrCodeWriter.encode(myCodeText,BarcodeFormat.QR_CODE, size, size, hintMap);
    int width = bitMatrix.width();
    Bitmap bmp = Bitmap.createBitmap(width, width, Bitmap.Config.RGB_565);
    for (int x = 0; x < width; x++) {
        for (int y = 0; y < width; y++) {
            bmp.setPixel(y, x, bitMatrix.get(x, y)==0 ? Color.BLACK : Color.WHITE);
        }
    }
    return bmp;
}

EDITAR

Es más rápido usar bitmap.setPixels (...) con una matriz de píxeles int en lugar de bitmap.setPixel uno por uno:

        BitMatrix bitMatrix = writer.encode(inputValue, BarcodeFormat.QR_CODE, size, size);
        int width = bitMatrix.getWidth();
        int height = bitMatrix.getHeight();
        int[] pixels = new int[width * height];
        for (int y = 0; y < height; y++) {
            int offset = y * width;
            for (int x = 0; x < width; x++) {
                pixels[offset + x] = bitMatrix.get(x, y) ? BLACK : WHITE;
            }
        }

        bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        bitmap.setPixels(pixels, 0, width, 0, 0, width, height);

12

Usé zxing-1.3 jar y tuve que hacer algunos cambios implementando el código de otras respuestas, así que dejaré mi solución para otros. Hice lo siguiente:

1) busque zxing-1.3.jar, descárguelo y agregue propiedades (agregue un jar externo).

2) en mi diseño de actividad agregue ImageView y asígnele un nombre (en mi ejemplo fue tnsd_iv_qr).

3) incluir código en mi actividad para crear una imagen qr (en este ejemplo, estaba creando QR para pagos con bitcoin):

    QRCodeWriter writer = new QRCodeWriter();
    ImageView tnsd_iv_qr = (ImageView)findViewById(R.id.tnsd_iv_qr);
    try {
        ByteMatrix bitMatrix = writer.encode("bitcoin:"+btc_acc_adress+"?amount="+amountBTC, BarcodeFormat.QR_CODE, 512, 512);
        int width = 512;
        int height = 512;
        Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
        for (int x = 0; x < width; x++) {
            for (int y = 0; y < height; y++) {
                if (bitMatrix.get(x, y)==0)
                    bmp.setPixel(x, y, Color.BLACK);
                else
                    bmp.setPixel(x, y, Color.WHITE);
            }
        }
        tnsd_iv_qr.setImageBitmap(bmp);
    } catch (WriterException e) {
        //Log.e("QR ERROR", ""+e);

    }

Si alguien se pregunta, la variable "btc_acc_adress" es una Cadena (con dirección BTC), amountBTC es un doble, con, por supuesto, el monto de la transacción.


Use esto: implementación 'me.dm7.barcodescanner: zxing: 1.9.13'
M. Usman Khan

5

zxing no proporciona (solo) una API web; en realidad, Google proporciona la API, a partir del código fuente que luego fue de código abierto en el proyecto.

Como Rob dice aquí, puede usar el código fuente de Java para el codificador de código QR para crear un código de barras sin procesar y luego representarlo como un mapa de bits.

Todavía puedo ofrecer una forma más fácil. Puede llamar a Barcode Scanner por intención para codificar un código de barras. Solo necesita unas pocas líneas de código y dos clases del proyecto, debajo android-integration. El principal es IntentIntegrator . Solo llama shareText().


tanques, esto parece útil, solo espero evitar cualquier API web, que podría ser un poco incómodo, en modo fuera de línea para mi aplicación, pero esto es muy prometedor, lo investigaré
Radu

No estoy seguro de que era clara pero estoy diciendo que las opciones ZXing qué no implican ninguna API web
Sean Owen

No, usa algunas bibliotecas que no están disponibles en Android, como java.awt
siemanko

Hola, perdón por necro este hilo, creo que es mejor si solo hago una pregunta aquí. Tengo la aplicación de escáner de código de barras de ustedes (la estoy usando para escanear un código QR) y si obtengo esta respuesta correcta, podría hacer lo mismo, abrir el escáner de código de barras a través de la intención con diferentes argumentos y devolvería un ¿Código QR de mapa de bits para mostrar?
Razgriz

1
@nivwusquorum, no, el codificador no usa java.awtni se conecta a la web, y puede verlo usado en la aplicación Barcode Scanner, en Android, sin conexión a Internet. @Razgriz no, no devuelve la imagen, pero muestra la imagen en la pantalla. El usuario puede guardar la imagen.
Sean Owen
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.