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 pytanieMuszę 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:
- NIE zostawiaj znaku wodnego (jak
onbarcode
biblioteka)
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.
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 }
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();
}
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
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);
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);
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.
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, podandroid-integration
. Główne jednym z nich jest IntentIntegrator . Po prostu zadzwoń shareText()
.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