Androidアプリケーションでqrcodeを作成する必要があり、AndroidアプリでQRコードを作成できるライブラリまたはソースコードが必要です。
必要なライブラリ:
onbarcode
ライブラリなど)私はすでにiPhone(Objective-C)用にこのようなコードを作成しましたが、自分のQRコードジェネレーターを作成する時間があるまで、Androidの簡単な修正が必要です。これは私の最初のAndroidプロジェクトですので、どんな助けでも歓迎します。
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 }
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();
}
この古いトピックかもしれませんが、このライブラリは非常に便利で使いやすいことがわかりました
androidで使用する例
Bitmap myBitmap = QRCode.from("www.example.org").bitmap();
ImageView myImage = (ImageView) findViewById(R.id.imageView);
myImage.setImageBitmap(myBitmap);
ここに、ビットマップを生成するためのシンプルで機能する関数を示します! 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);
私は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倍です。
zxingは(のみ)Web APIを提供しません。実際、それは後でプロジェクトでオープンソース化されたソースコードから、APIを提供するGoogleです。
Robがここで言うように、 QRコードエンコーダーのJavaソースコード を使用して、生のバーコードを作成し、それをビットマップとしてレンダリングできます。
まだ簡単な方法を提供できます。 IntentでBarcode Scannerを呼び出して、バーコードをエンコードできます。数行のコードと、プロジェクトの2つのクラス(Android-integration
の下)が必要です。主なものは IntentIntegrator です。 shareText()
を呼び出すだけです。