Comment générer un QR Code pour une application Android? [fermé]

92

J'ai besoin de créer un QR Code dans mon application Android et j'ai besoin d'une bibliothèque ou d'un code source qui me permet de créer un QR Code dans une application Android.

La bibliothèque dont j'ai besoin doit:

  1. ne pas laisser de filigrane (comme la onbarcodebibliothèque)
  2. ne pas utiliser l'API de service Web pour créer le qrcode (comme la bibliothèque de Google zxing)
  3. pas besoin d'installateurs tiers (comme QR Droid)

J'ai déjà créé un tel code pour iPhone (Objective-C) mais j'ai besoin d'une solution rapide pour Android jusqu'à ce que j'aie le temps de créer mon propre générateur de code QR. C'est mon premier projet Android, donc toute aide sera appréciée.

Radu
la source
vous pouvez utiliser zxing son open source
nandeesh
2
zxing n'est pas une API Web, en fait, voir ci
Sean Owen
1
Essayez mon application de test simple pour générer un bitmap QR ici: stackoverflow.com/a/30529519/165071
Alexander Farber

Réponses:

68

Avez-vous examiné ZXING ? Je l'ai utilisé avec succès pour créer des codes à barres. Vous pouvez voir un exemple de travail complet dans l' application 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 }
Rob
la source
J'ai forké l'open source bitcoin de github et l'ai essayé sur mes appareils Android 2.2, la force d'application est fermée, quelque chose ne va pas?
Roy Lee
Désolé, je n'ai pas regardé cette application depuis plus d'un an. Comme mentionné ci-dessous par Sean, consultez la source de l'encodeur zxing ici: code.google.com/p/zxing/source/browse/trunk#trunk/core/src/com/…
Rob
@Rob générera-t-il le code QR du numéro défini par l'utilisateur? seulement nombre ou nombre avec laphabets
Erum
@Erum, il créera un code-barres pour la plupart des chaînes alphanumériques que vous fournissez
Rob
Utilisez ceci: implémentation 'me.dm7.barcodescanner: zxing: 1.9.13'
M. Usman Khan
97

avec zxing c'est mon code pour créer un 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();
    }
Stefano
la source
A travaillé pour moi. Ajout facile.
Roon13
Merci. Travaille pour moi.
RoShan Shan
@Stefano Peut-il générer n non. de code QR unique?
Ashish Tiwari
A travaillé comme un charme g88 !! +1 Existe-t-il une option dans laquelle je peux ajouter un logo à cela?
Amit
1
pour éviter les fuites de mémoire, n'oubliez pas de gérer la mémoire bitmap créée par Bitmap.createBitmap.
gMale
43

Peut-être que ce vieux sujet, mais j'ai trouvé que cette bibliothèque est très utile et facile à utiliser

QRGen

exemple pour l'utiliser dans Android

 Bitmap myBitmap = QRCode.from("www.example.org").bitmap();
ImageView myImage = (ImageView) findViewById(R.id.imageView);
myImage.setImageBitmap(myBitmap);
Antwan
la source
2
C'est une solution simple et efficace!
Zohab Ali
5
.bitmap () est introuvable
Marcel Adel
Vous devez utiliser la dépendance Android: implementation 'com.github.kenglxn.QRGen:android:[version]' et importer la classe import net.glxn.qrgen.android.QRCode
QRCode
2
Échec de la résolution: com.github.kenglxn.QRGen: android: 2.6.0
M. Usman Khan
2
Dans votre projet build.gradle, ajoutez maven {url " jitpack.io "} à allprojects.repositiories
tagy22
18

Voici ma fonction simple et fonctionnelle pour générer un Bitmap! J'utilise uniquement ZXing1.3.jar! J'ai également réglé le niveau de correction sur Élevé!

PS: x et y sont inversés, c'est normal, car bitMatrix inverse x et y. Ce code fonctionne parfaitement avec une image carrée.

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

ÉDITER

Il est plus rapide d'utiliser bitmap.setPixels (...) avec un tableau pixel int au lieu de bitmap.setPixel un par un:

        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);
bluestart83
la source
12

J'ai utilisé le jar zxing-1.3 et j'ai dû faire quelques changements en implémentant le code d'autres réponses, donc je laisserai ma solution pour d'autres. J'ai fait ce qui suit:

1) trouvez zxing-1.3.jar, téléchargez-le et ajoutez des propriétés (ajoutez un pot externe).

2) dans ma présentation d'activité, ajoutez ImageView et nommez-le (dans mon exemple, c'était tnsd_iv_qr).

3) inclure du code dans mon activité pour créer une image qr (dans cet exemple, je créais un QR pour les paiements 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 quelqu'un se demande, la variable "btc_acc_adress" est une chaîne (avec une adresse BTC), amountBTC est un double, avec, bien sûr, le montant de la transaction.

Adam Staszak
la source
Utilisez ceci: implémentation 'me.dm7.barcodescanner: zxing: 1.9.13'
M. Usman Khan
5

zxing ne fournit pas (seulement) une API Web; vraiment, c'est Google qui fournit l'API, à partir du code source qui a ensuite été open-source dans le projet.

Comme Rob le dit ici, vous pouvez utiliser le code source Java pour l'encodeur de code QR pour créer un code-barres brut, puis le rendre sous forme de bitmap.

Je peux encore offrir un moyen plus simple. Vous pouvez appeler Barcode Scanner par intention pour encoder un code-barres. Vous n'avez besoin que de quelques lignes de code et de deux classes du projet, sous android-integration. Le principal est IntentIntegrator . Appelez shareText().

Sean Owen
la source
réservoirs cela semble utile, seulement j'espère contourner toute API Web, qui pourrait un peu inconfortable, en mode hors ligne pour mon application, mais c'est très prometteur, je vais l'examiner
Radu
Je ne sais pas , je suis clair , mais je dis que les options ZXing ne pas impliquent des API Web
Sean Owen
Non, il utilise certaines bibliothèques non disponibles sur Android, comme java.awt
siemanko
Bonjour, désolé de necro ce fil, je pense que c'est mieux si je viens de poser une question ici. J'ai l'application de scanner de codes à barres de vous (je l'utilise pour scanner un code QR) et si j'ai bien répondu, je pourrais simplement faire la même chose, ouvrir le scanner de codes à barres via l'intention avec différents arguments et il renverrait un Bitmap QR Code pour l'affichage?
Razgriz le
1
@nivwusquorum, non, l'encodeur n'utilise pas java.awtou ne se connecte pas au Web, et vous pouvez le voir utilisé dans l'application Barcode Scanner - sur Android, sans connexion Internet. @Razgriz non il ne renvoie pas l'image, mais montre l'image à l'écran pour vous. L'utilisateur peut enregistrer l'image.
Sean Owen