Jak wygenerować kod QR dla aplikacji na Androida? [zamknięte]

Zamknięte. to pytanie nie spełnia wytycznych dotyczących przepełnienia stosu . Obecnie nie przyjmuje odpowiedzi.


Chcesz poprawić to pytanie? Update the pytanie więc to on-topic dla przepełnienia stosu.

Zamknięte 4 lata temu .

Popraw to pytanie

Muszę utworzyć kod QR w mojej aplikacji na Androida i potrzebuję biblioteki lub kodu źródłowego, który pozwoli mi utworzyć kod QR w aplikacji na Androida.

The library I need musi:

  1. NIE zostawiaj znaku wodnego (jak onbarcode biblioteka)
  2. Qrcode nie jest używany do tworzenia qrcode (podobnie jak ZXing Biblioteki Google).]} Nie trzeba instalować innych firm (takich jak QR Droid)]}

Już stworzyłem taki kod dla iPhone ' a (Objective-C), ale potrzebuję szybkiej poprawki dla Androida, dopóki nie będę miał czasu na zrobienie własnego generatora kodów QR. To mój pierwszy projekt na Androida, więc każda pomoc będzie doceniona.

Author: Sean Owen, 2012-01-10

6 answers

Przyjrzałeś się ZXING ? Z powodzeniem używam go do tworzenia kodów kreskowych. Możesz zobaczyć pełny przykład pracy w bitcoin aplikacji 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 }
 70
Author: Rob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-10 09:44:08

Z zxingiem jest to mój kod do tworzenia 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();
    }
 99
Author: Stefano,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-13 09:53:55

Może ten stary temat, ale znalazłem tę bibliotekę bardzo pomocną i łatwą w użyciu

QRGen

Przykład użycia go w Androidzie

 Bitmap myBitmap = QRCode.from("www.example.org").bitmap();
ImageView myImage = (ImageView) findViewById(R.id.imageView);
myImage.setImageBitmap(myBitmap);
 43
Author: Antwan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-16 03:01:12

Oto moja prosta i działająca funkcja do generowania bitmapy! Ja Uzywam ZXing1. 3.tylko słoik! Ustawiłem również poziom korekty na wysoki!

PS: X i y są odwrócone, to normalne, ponieważ bitMatrix odwraca x i y. ten kod działa idealnie z kwadratowym obrazem.

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;
}

EDIT

Używanie bitmapy jest szybsze.setPixels(...) z tablicą pixel int zamiast bitmapy.setPixel jeden po drugim:

        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);
 18
Author: bluestart83,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-30 14:15:54

Użyłem zxing-1.3 jar i musiałem wprowadzić pewne zmiany implementujące kod z innych odpowiedzi, więc moje rozwiązanie zostawię dla innych. Zrobiłem co następuje:

1) Znajdź zxing-1.3.jar, pobierz go i dodaj we właściwościach (dodaj zewnętrzny jar).

2) w moim układzie aktywności dodaj ImageView i nazwij go (w moim przykładzie był to tnsd_iv_qr).

3) Dołącz kod do mojej aktywności, aby utworzyć obraz qr (w tym przykładzie tworzyłem QR dla płatności 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);

    }

Jeśli ktoś jest zastanawiasz się, zmienna "btc_acc_adress" jest ciągiem znaków (z adresem BTC), amountBTC jest podwójnym, z, oczywiście, Kwota transakcji.

 12
Author: Adam Staszak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-01 13:31:40

Zxing nie dostarcza (tylko) web API; tak naprawdę, to jest Google dostarczające API, z kodu źródłowego, który został później otwarty w projekcie.

Jak mówi Rob, możesz użyć kodu źródłowego Javy dla kodera QR, aby utworzyć surowy Kod kreskowy, a następnie renderować go jako bitmapę.

Mogę zaoferować łatwiejszy sposób. Możesz wywołać Skaner kodów kreskowych, aby zakodować Kod kreskowy. Potrzebujesz tylko kilku linijek kodu i dwóch klas z projektu, pod android-integration. Główne jednym z nich jest IntentIntegrator . Po prostu zadzwoń shareText().
 5
Author: Sean Owen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-26 05:45:36