Подтвердить что ты не робот

Как сгенерировать QR-код для Android-приложения?

Мне нужно создать qrcode в моем приложении для Android, и мне нужна библиотека или исходный код, который позволяет мне создать QR-код в приложении для Android.

Мне нужна библиотека:

  • не оставляйте водяной знак (например, библиотеку onbarcode)
  • не использовать API веб-службы для создания qrcode (например, библиотеки Google zxing)
  • не нужны сторонние инсталляторы (например, QR Droid)

Я уже создал такой код для iPhone (Objective-C), но мне нужно быстрое исправление для Android, пока у меня не будет времени создать собственный генератор QR-кода. Это мой первый проект Android, поэтому любая помощь будет оценена.

4b9b3361

Ответ 1

Вы заглянули в ZXING? Я успешно использовал его для создания штрих-кодов. Вы можете увидеть полный рабочий пример в приложении 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 }

Ответ 2

с zxing это мой код для создания 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();
    }

Ответ 3

Возможно, эта старая тема, но я нашел эту библиотеку очень полезной и простой в использовании.

QRGen

пример для использования в android

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

Ответ 4

Вот моя простая и работающая функция для создания Bitmap! Я использую только ZXing1.3.jar! Я также установил уровень коррекции выше!

PS: x и y обращены, это нормально, потому что битMatrix обратный x и y. Этот код отлично работает с квадратным изображением.

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

Ответ 5

Я использовал zxing-1.3 jar, и мне пришлось внести некоторые изменения в реализацию кода из других ответов, поэтому я оставлю свое решение для других. Я сделал следующее:

1) найдите zxing-1.3.jar, загрузите его и добавьте свойства (добавьте внешнюю банку).

2) в макете активности добавьте ImageView и назовите его (в моем примере это tnsd_iv_qr).

3) включить код в мою деятельность для создания qr-изображения (в этом примере я создавал QR для биткойн-платежей):

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

    }

Если кто-то задается вопросом, переменная "btc_acc_adress" является строкой (с адресом BTC), amountBTC является двойным, и, конечно, сумма транзакции.

Ответ 6

zxing не предоставляет (только) веб-API; действительно, это Google, предоставляющий API, из исходного кода, который позже был открыт в проекте.

Как говорит Роб, здесь вы можете использовать исходный код Java для кодового кодировщика QR, чтобы создать необработанный штрих-код, а затем сделать его как Растровые.

Я могу предложить еще более простой способ. Вы можете вызвать сканер штрих-кода по Intent для кодирования штрих-кода. Вам нужно всего несколько строк кода и два класса из проекта под android-integration. Основной IntentIntegrator. Просто позвоните shareText().