Bir Android uygulaması için QR Kodu nasıl oluşturulur? [kapalı]


92

Android uygulamamda bir qrcode oluşturmam gerekiyor ve bir Android uygulamasında QR Kodu oluşturmama izin veren bir kitaplığa veya kaynak koda ihtiyacım var.

İhtiyacım olan kütüphane:

  1. filigran bırakmayın ( onbarcodekütüphane gibi )
  2. qrcode'u oluşturmak için web hizmeti API'sini kullanmayın (Google'ın kütüphanesi zxing gibi)
  3. 3. taraf yükleyicilere ihtiyaç duymaz (QR Droid gibi)

İPhone (Objective-C) için böyle bir kodu zaten oluşturdum, ancak kendi QR Code oluşturucumu yapmak için zamanım olana kadar Android için hızlı bir düzeltmeye ihtiyacım var. Bu benim ilk android projem, bu yüzden herhangi bir yardım takdir edilecektir.


açık kaynağı zxing'i kullanabilirsiniz
nandeesh

2
zxing bir web API'si değildir, aslında aşağıya bakın
Sean Owen

1
QR bitmap oluşturmak için basit test uygulamamı burada deneyin: stackoverflow.com/a/30529519/165071
Alexander Farber

Yanıtlar:


68

Eğer baktınız mı ZXing ? Başarıyla barkod oluşturmak için kullanıyorum. Bitcoin uygulaması src'de tam bir çalışma örneği görebilirsiniz.

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

Github'dan bitcoin açık kaynağını çatalladım ve android 2.2 cihazlarımda deneme yaptım, uygulama gücü kapandı, bir sorun mu var?
Roy Lee

Maalesef o uygulamaya bir yıldan fazla bakmadım. Aşağıda Sean tarafından belirtildiği gibi, zxing kodlayıcı kaynağına buradan göz atın: code.google.com/p/zxing/source/browse/trunk#trunk/core/src/com/…
Rob

@Rob kullanıcı tanımlı numaranın QR kodunu üretecek mi? laphabets tek sayı veya sayı
Erum

@Erum, sağladığınız en alfanümerik dizeler için bir barkod oluşturacaktır
Rob

Bunu kullanın: 'me.dm7.barcodescanner: zxing: 1.9.13' uygulama
M. Usman Khan

97

zxing ile bu benim QR oluşturmak için kodum

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

Benim için çalıştı. Kolay ekleme.
Roon13

Teşekkürler. Benim için çalış.
RoShan Shan

@Stefano n no üretebilir mi? benzersiz QR kodu?
Ashish Tiwari

Büyüleyici bir g88 gibi çalıştı !! +1 Buna logo ekleyebileceğim herhangi bir seçenek var mı?
Amit

1
bellek sızıntılarını önlemek için , tarafından oluşturulan bitmap belleğini yönetmeyi unutmayın Bitmap.createBitmap.
gMale

43

Belki bu eski konu ama bu kitaplığın çok yararlı ve kullanımı kolay olduğunu buldum

QRGen

android'de kullanmak için örnek

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

2
Bu kolay ve çalışan bir çözüm!
Zohab Ali

5
.bitmap () bulunamadı
Marcel Adel

Android bağımlılığını kullanmalı implementation 'com.github.kenglxn.QRGen:android:[version]' ve QRCode sınıfını şu şekilde içe aktarmalısınız:import net.glxn.qrgen.android.QRCode
anro

2
Çözümlenemedi: com.github.kenglxn.QRGen: android: 2.6.0
M. Usman Khan

2
Build.gradle projenizde allprojects.repositiories'e maven {url " jitpack.io "} ekleyin
tagy22

18

İşte bir Bitmap oluşturmak için basit ve çalışan işlevim! Sadece ZXing1.3.jar kullanıyorum! Düzeltme Düzeyini de Yüksek olarak ayarladım!

Not: x ve y tersine çevrilir, normaldir çünkü bitMatrix, x ve y'yi tersine çevirir. Bu kod, kare bir görüntüyle mükemmel çalışır.

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

DÜZENLE

Tek tek bitmap.setPixel yerine piksel int dizisi ile bitmap.setPixels (...) kullanmak daha hızlıdır:

        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

Zxing-1.3 jar kullandım ve diğer cevaplardan kod uygulayarak bazı değişiklikler yapmak zorunda kaldım, bu yüzden çözümümü diğerleri için bırakacağım. Ben şunları yaptım:

1) zxing-1.3.jar dosyasını bulun, indirin ve özellikleri ekleyin (harici kavanoz ekleyin).

2) etkinlik düzenime ImageView ekleyin ve adlandırın (benim örneğimde tnsd_iv_qr idi).

3) qr görüntüsü oluşturmak için etkinliğime kod ekleyin (bu örnekte, bitcoin ödemeleri için QR oluşturuyordum):

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

    }

Birisi merak ederse, "btc_acc_adress" değişkeni bir Dize'dir (BTC adresi ile), miktarBTC, elbette işlem tutarı ile iki katına çıkar.


Bunu kullanın: 'me.dm7.barcodescanner: zxing: 1.9.13' uygulama
M. Usman Khan

5

zxing (yalnızca) bir web API'si sağlamaz; gerçekten, bu Google API'yi daha sonra projede açık kaynaklı olan kaynak kodundan sağlıyor.

Rob'un burada dediği gibi , ham bir barkod oluşturmak ve ardından onu bir Bitmap olarak işlemek için QR kod kodlayıcı için Java kaynak kodunu kullanabilirsiniz .

Yine de daha kolay bir yol sunabilirim. Bir barkodu kodlamak için Barkod Tarayıcısını Niyetle çağırabilirsiniz. Sadece birkaç satır koda ve projeden iki sınıfa ihtiyacınız var android-integration. Bunlardan en önemlisi , IntentIntegrator . Sadece ara shareText().


tanklar bu yararlı görünüyor, sadece uygulamam için çevrimdışı modda biraz rahatsız edici olabilecek herhangi bir web API'sini atlamayı umuyorum, ancak bu çok umut verici, onu inceleyeceğim
Radu

Emin değilim açıktı ama ZXing seçenekleri do söylüyorum değil herhangi bir web API'leri dahil
Sean Owen

Hayır, java.awt gibi android üzerinde kullanılmayan bazı kitaplıkları kullanıyor
siemanko

Merhaba, bu konuyu necro için özür dilerim, sanırım burada bir soru sorsam daha iyi olur. Sizin tarafınızdan Barkod Tarayıcı Uygulamasına sahibim (bunu bir QR Kodunu taramak için kullanıyorum) ve eğer bu yanıtı doğru alırsam, aynı şeyi yapabilirim, Barkod Tarayıcıyı farklı argümanlarla niyetle açıp bir Bitmap QR Code for display?
Razgriz

1
@nivwusquorum, hayır, kodlayıcı web'i kullanmıyor java.awtveya web'e bağlanmıyor ve Barkod Tarayıcı uygulamasında kullanıldığını görebilirsiniz - Android'de, internet bağlantısı olmadan. @Razgriz hayır görüntüyü döndürmez ama sizin için ekranda görüntüyü gösterir. Kullanıcı görüntüyü kaydedebilir.
Sean Owen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.