2012-01-10 38 views
50

Tôi cần tạo mã qrcode trong ứng dụng Android của mình và tôi cần thư viện hoặc mã nguồn cho phép tôi tạo Mã QR trong ứng dụng Android.Làm cách nào để tạo Mã QR cho ứng dụng Android?

Thư viện Tôi cần phải:

  1. không để lại một hình mờ (như onbarcode thư viện)
  2. không sử dụng dịch vụ web API để tạo ra các qrcode (như ZXing thư viện của Google)
  3. không cần bên thứ 3 trình cài đặt (như QR Droid)

Tôi đã tạo mã như vậy cho iPhone (Objective-C) nhưng tôi cần khắc phục nhanh cho Android cho đến khi tôi có thời gian để tạo trình tạo mã QR của sở hữu. Đây là dự án android đầu tiên của tôi nên mọi trợ giúp sẽ được đánh giá cao.

+0

bạn có thể sử dụng ZXing mở của nó nguồn – nandeesh

+0

zxing không phải là một API web, trên thực tế, hãy xem bên dưới –

+1

Thử ứng dụng thử nghiệm đơn giản của tôi để tạo bitmap QR tại đây: http://stackoverflow.com/a/30529519/165071 –

Trả lời

48

Bạn đã xem xét ZXING? Tôi đã sử dụng thành công để tạo mã vạch. Bạn có thể thấy một ví dụ làm việc đầy đủ trong 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 } 
+0

Tôi đã chia nhỏ nguồn mở bitcoin từ github và tryout trên thiết bị Android 2.2 của tôi, đóng ứng dụng, có gì sai không? – Roylee

+0

Xin lỗi tôi đã không xem xét ứng dụng đó trong hơn một năm. Như đã đề cập dưới đây của Sean, hãy kiểm tra nguồn cho bộ mã hóa zxing tại đây: http://code.google.com/p/zxing/source/browse/trunk#trunk/core/src/com/google/zxing/qrcode/encoder – Rob

+0

@Rob nó sẽ tạo mã QR của người dùng xác định số? chỉ số hoặc số với laphabets – Erum

5

không (chỉ) cung cấp một API web; thực sự, đó là Google cung cấp API, từ mã nguồn mà sau này đã được mở nguồn trong dự án.

Như Rob nói ở đây bạn có thể sử dụng Java source code for the QR code encoder để tạo mã vạch thô và sau đó hiển thị mã vạch dưới dạng bitmap.

Tôi vẫn có thể cung cấp một cách dễ dàng hơn. Bạn có thể gọi Máy quét mã vạch bằng Intent để mã hóa mã vạch. Bạn chỉ cần một vài dòng mã và hai lớp từ dự án, dưới android-integration. Phần chính là IntentIntegrator. Chỉ cần gọi shareText().

+0

xe tăng này có vẻ hữu ích, chỉ tôi hy vọng sẽ bỏ qua bất kỳ API web nào, có thể hơi không thoải mái, ở chế độ ngoại tuyến cho ứng dụng, nhưng điều này là rất hứa hẹn, tôi sẽ xem xét nó – Radu

+0

Không chắc chắn tôi đã rõ ràng nhưng tôi nói rằng các tùy chọn zxing làm * không * liên quan đến bất kỳ API web –

+0

Không, nó sử dụng một số thư viện unavaile trên android, như java. awt – siemanko

56

với ZXing đây là mã của tôi cho tạo 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(); 
    } 
+0

Làm việc cho tôi. Dễ dàng thêm vào. – Roon13

+0

Cảm ơn bạn. Làm việc cho tôi. –

+0

@Stefano Nó có thể tạo ra n không. mã QR độc đáo? –

7

Tôi đã sử dụng ZXing-1.3 jar và tôi đã phải thực hiện một số thay đổi thực hiện mã từ câu trả lời khác, vì vậy tôi sẽ để lại cho tôi, giải pháp cho người khác. Tôi đã làm như sau:

1) tìm zxing-1.3.jar, tải xuống và thêm thuộc tính (thêm jar bên ngoài).

2) trong bố cục hoạt động của tôi thêm ImageView và đặt tên cho nó (trong ví dụ của tôi là tnsd_iv_qr).

3) bao gồm mã trong hoạt động của tôi để tạo ra hình ảnh qr (trong ví dụ này, tôi đã tạo ra QR cho thanh toán 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); 

    } 

Nếu ai đó đang tự hỏi, biến "btc_acc_adress" là một String (với BTC địa chỉ), amountBTC là một đôi, với, tất nhiên, số tiền giao dịch.

11

Đây là chức năng đơn giản và hoạt động của tôi để tạo bitmap! Tôi chỉ sử dụng ZXing1.3.jar! Tôi cũng đã đặt Mức độ chỉnh sửa thành Cao!

PS: x và y được đảo ngược, bình thường, vì bitMatrix đảo ngược x và y. Mã này hoạt động hoàn hảo với hình ảnh vuông.

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

@dikkini tại sao bạn chỉnh sửa mã của mình? Tôi không chấp nhận nó. Bạn đã thử nó chưa? Tôi không chìm như vậy, tôi đã làm việc hoàn hảo. Đó không phải là một bản sao chép. – bluestart83

+1

Tôi chỉnh sửa mã của bạn vì tôi sử dụng nó trong dự án của mình. Tôi kiểm tra nó. Và tôi upvote câu trả lời của bạn, bởi vì nó là mã tốt nhưng với một sai lầm nhỏ. – dikkini

+0

Làm thế nào tôi có thể hiển thị hộp thoại tiến trình trong khi tạo mã qr? –

14

Có lẽ chủ đề cũ này nhưng tôi tìm thấy thư viện này là rất hữu ích và dễ sử dụng

QRGen

ví dụ cho việc sử dụng nó trong android

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