Como gerar um QR Code para um aplicativo Android? [fechadas]


93

Preciso criar um qrcode em meu aplicativo Android e preciso de uma biblioteca ou código-fonte que me permita criar um código QR em um aplicativo Android.

A biblioteca de que preciso deve:

  1. não deixar marca d'água (como onbarcodebiblioteca)
  2. não use a API de serviço da web para criar o qrcode (como a biblioteca zxing do Google)
  3. não precisa de instaladores de terceiros (como QR Droid)

Já criei esse código para iPhone (Objective-C), mas preciso de uma solução rápida para Android até ter tempo de fazer meu próprio gerador de QR Code. É meu primeiro projeto android, então qualquer ajuda será apreciada.


você poderia usar zxing como código aberto
— nandeesh

2
zxing não é uma API web, na verdade, veja abaixo
— Sean Owen

1
Experimente meu aplicativo de teste simples para gerar bitmap QR aqui: stackoverflow.com/a/30529519/165071
— Alexander Farber

Respostas:


69

Você já pesquisou o ZXING ? Tenho usado com sucesso para criar códigos de barras. Você pode ver um exemplo completo de trabalho no aplicativo 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 }

Eu fiz o bifurcação do código-fonte aberto do bitcoin no github e testei nos meus dispositivos Android 2.2, força do aplicativo fechada, algo errado?
— Roy Lee,

Desculpe, eu não vejo esse aplicativo há mais de um ano. Conforme mencionado abaixo por Sean, verifique a fonte do codificador zxing aqui: code.google.com/p/zxing/source/browse/trunk#trunk/core/src/com/…
— Rob

@Rob irá gerar o código QR do número definido pelo usuário? apenas o número ou o número com laphabets
— Erum

@Erum irá criar um código de barras para qualquer string alfanumérica que você fornecer
— Rob

Use isto: implementação 'me.dm7.barcodescanner: zxing: 1.9.13'
— M. Usman Khan

98

com zxing este é o meu código para criar 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();
    }

Funcionou para mim. Fácil adição.
— Roon13

Te agradece. Trabalhe para mim.
— RoShan Shan

@Stefano Pode gerar n não. de código QR exclusivo?
— Ashish Tiwari

Funcionou como um encanto g88 !! +1 Existe alguma opção em que eu possa adicionar algum logotipo a isso?
— Amit

1
para evitar vazamentos de memória, não se esqueça de gerenciar a memória de bitmap que está sendo criada pelo Bitmap.createBitmap.
— março

43

Talvez este tópico antigo, mas achei que esta biblioteca é muito útil e fácil de usar

QRGen

exemplo para usá-lo no Android

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

2
Esta é uma solução fácil e funcional!
— Zohab Ali

6
.bitmap () não foi encontrado
— Marcel Adel

Você deve usar a dependência do Android: implementation 'com.github.kenglxn.QRGen:android:[version]' e importar a classe QRCode assim:import net.glxn.qrgen.android.QRCode
— anro

2
Falha ao resolver: com.github.kenglxn.QRGen: android: 2.6.0
— M. Usman Khan

2
Em seu projeto build.gradle adicione maven {url " jitpack.io "} a allprojects.repositiories
— tagy22

18

Aqui está minha função simples e funcional para gerar um bitmap! Eu uso apenas ZXing1.3.jar! Eu também configurei o Nível de Correção para Alto!

PS: x e y estão invertidos, é normal, porque bitMatrix inverte x e y. Este código funciona perfeitamente com uma imagem quadrada.

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

É mais rápido usar bitmap.setPixels (...) com uma matriz de pixel int em vez de bitmap.setPixel um por um:

        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

Usei o jar zxing-1.3 e tive que fazer algumas mudanças implementando o código de outras respostas, então deixarei minha solução para outras. Eu fiz o seguinte:

1) encontre zxing-1.3.jar, baixe-o e adicione propriedades (adicione jar externo).

2) em meu layout de atividade, adicione ImageView e nomeie-o (no meu exemplo foi tnsd_iv_qr).

3) incluir código em minha atividade para criar imagem qr (neste exemplo, eu estava criando QR para pagamentos de 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);

    }

Se alguém está se perguntando, a variável "btc_acc_adress" é uma String (com endereço BTC), amountBTC é um double, com, é claro, o valor da transação.


Use isto: implementação 'me.dm7.barcodescanner: zxing: 1.9.13'
— M. Usman Khan

5

zxing não fornece (apenas) uma API da web; na verdade, é o Google fornecendo a API, a partir do código-fonte que mais tarde foi aberto no projeto.

Como Rob diz aqui, você pode usar o código-fonte Java para o codificador de código QR para criar um código de barras bruto e, em seguida, renderizá-lo como um bitmap.

Posso oferecer uma maneira mais fácil ainda. Você pode chamar o Barcode Scanner por intenção para codificar um código de barras. Você precisa de apenas algumas linhas de código e duas classes do projeto em android-integration. O principal é IntentIntegrator . Basta ligar shareText().


tanques isso parece útil, só espero ignorar qualquer API da web, que pode ser um pouco desconfortável, no modo offline para meu aplicativo, mas isso é muito promissor, vou dar uma olhada
— Radu

Não tenho certeza se fui claro, mas estou dizendo que as opções zxing não envolvem nenhuma API da web
— Sean Owen

Não, ele usa algumas bibliotecas disponíveis no Android, como java.awt
— siemanko

Olá, desculpe por necro este tópico, acho melhor se eu apenas fizesse uma pergunta aqui. Eu tenho o aplicativo Barcode Scanner de vocês (estou usando-o para escanear um QR Code) e se acertasse a resposta, poderia simplesmente fazer o mesmo, abrir o Barcode Scanner via intent com diferentes argumentos e ele retornaria um Código QR de bitmap para exibição?
— Razgriz de

1
@nivwusquorum, não, o codificador não usa java.awt, ou se conecta à web, e você pode vê-lo usado no aplicativo Barcode Scanner - no Android, sem uma conexão com a internet. @Razgriz não ele não retorna a imagem, mas mostra a imagem na tela para você. O usuário pode salvar a imagem.
— Sean Owen
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.