web-dev-qa-db-ja.com

AndroidアプリケーションのQRコードを生成する方法は?

Androidアプリケーションでqrcodeを作成する必要があり、AndroidアプリでQRコードを作成できるライブラリまたはソースコードが必要です。

必要なライブラリ:

  1. 透かしを残さない(onbarcodeライブラリなど)
  2. webサービスAPIを使用してqrcodeを作成しない(Googleのライブラリzxingなど)
  3. サードパーティのインストーラー(QR Droidなど)は不要

私はすでにiPhone(Objective-C)用にこのようなコードを作成しましたが、自分のQRコードジェネレーターを作成する時間があるまで、Androidの簡単な修正が必要です。これは私の最初のAndroidプロジェクトですので、どんな助けでも歓迎します。

71
Radu

ZXING を調べましたか?私はバーコードを作成するためにそれを正常に使用しています。 bitcoin application 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 }
60
Rob

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

この古いトピックかもしれませんが、このライブラリは非常に便利で使いやすいことがわかりました

QRGen

androidで使用する例

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

ここに、ビットマップを生成するためのシンプルで機能する関数を示します! ZXing1.3.jarのみを使用します!また、修正レベルを高に設定しました!

PS:bitMatrixがxとyを逆にするため、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;
}

編集

Bitmap.setPixelを1つずつではなく、pixel int配列でbitmap.setPixels(...)を使用する方が高速です。

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

私はzxing-1.3 jarを使用し、他の回答からコードを実装するためにいくつかの変更を行う必要があったため、ソリューションを他の人に任せます。私は次のことをしました:

1)zxing-1.3.jarを見つけてダウンロードし、プロパティを追加します(外部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は、もちろんトランザクション量を含む2倍です。

10
Adam Staszak

zxingは(のみ)Web APIを提供しません。実際、それは後でプロジェクトでオープンソース化されたソースコードから、APIを提供するGoogleです。

Robがここで言うように、 QRコードエンコーダーのJavaソースコード を使用して、生のバーコードを作成し、それをビットマップとしてレンダリングできます。

まだ簡単な方法を提供できます。 IntentでBarcode Scannerを呼び出して、バーコードをエンコードできます。数行のコードと、プロジェクトの2つのクラス(Android-integrationの下)が必要です。主なものは IntentIntegrator です。 shareText()を呼び出すだけです。

5
Sean Owen