Je dois créer un qrcode dans mon Android application) et une bibliothèque ou un code source qui me permet de créer un code QR dans une Android app.
La bibliothèque dont j'ai besoin doit:
onbarcode
J'ai déjà créé ce code pour iPhone (Objective-C) mais il me faut une solution rapide pour Android jusqu'à ce que j'ai le temps de créer mon propre générateur de code QR. C'est mon premier Android projet, toute aide sera donc appréciée.
Avez-vous examiné ZXING ? Je l'utilise avec succès pour créer des codes à barres. Vous pouvez voir un exemple de travail complet dans le application src de bitcoin
// 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 }
avec zxing c'est mon code pour créer 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();
}
Peut-être que cet ancien sujet, mais j’ai trouvé cette bibliothèque très utile et facile à utiliser
exemple d'utilisation dans Android
Bitmap myBitmap = QRCode.from("www.example.org").bitmap();
ImageView myImage = (ImageView) findViewById(R.id.imageView);
myImage.setImageBitmap(myBitmap);
Voici ma fonction simple et fonctionnelle pour générer un bitmap! J'utilise ZXing1.3.jar seulement! 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;
}
EDIT
Il est plus rapide d'utiliser bitmap.setPixels (...) avec un tableau en pixels 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);
J'ai utilisé zxing-1.3 jar et j'ai dû faire quelques changements pour implémenter le code à partir d'autres réponses, je vais donc laisser ma solution à d'autres. J'ai fait ce qui suit:
1) trouvez zxing-1.3.jar, téléchargez-le et ajoutez-y des propriétés (ajoutez un fichier jar externe).
2) dans ma présentation d'activité, ajoutez ImageView et nommez-la (dans mon exemple, il s'agissait de tnsd_iv_qr).
3) inclure du code dans mon activité pour créer une image qr (dans cet exemple, je créais un code QR pour les paiements en bitcoins):
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 pose la question, la variable "btc_acc_adress" est une chaîne (avec l'adresse BTC), montantBTC est un double, avec bien sûr le montant de la transaction.
zxing ne fournit pas (uniquement) 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 le codeur de code QR pour créer un code-barres brut, puis le restituer sous forme de bitmap.
Je peux encore offrir un moyen plus facile. Vous pouvez appeler Scanner de code à barres par intention pour coder 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 . Il suffit d'appeler shareText()
.