Triển khai mã QR trong Android
Gần đây, việc sử dụng mã QR ngày càng trở nên phổ biến, từ thanh toán, thực đơn nhà hàng cho đến cơ chế check-in/check-out bắt đầu được sử dụng tại một số văn phòng hay lối vào những nơi công cộng.
Về cơ bản, Mã QR tạo điều kiện thuận lợi cho quá trình cung cấp dữ liệu cho người tiêu dùng bằng một hình ảnh duy nhất đại diện cho chính dữ liệu, nơi dữ liệu sẽ được người tiêu dùng quản lý để cuối cùng có thể xác định hành động cần thực hiện.
Về cơ bản, QRCode chỉ là sự thể hiện dữ liệu dưới dạng hình ảnh duy nhất.
Trong quá trình phát triển Android, chúng tôi có thể chuyên môn hóa hai chức năng được triển khai độc lập về phía chúng tôi.
Máy phát điện
Để tạo Mã QR, chúng tôi có thể sử dụng thư viện này từ google.
implementation 'com.google.zxing:core:3.2.1
private fun generatedQR(value: String): Bitmap? {
val bitMatrix: BitMatrix
try {
bitMatrix = MultiFormatWriter().encode(
value,
BarcodeFormat.QR_CODE,
500, 500, null
)
} catch (e: IllegalArgumentException) {
return null
}
val bitMatrixWidth = bitMatrix.width
val bitMatrixHeight = bitMatrix.height
val pixels = IntArray(bitMatrixWidth * bitMatrixHeight)
for (y in 0 until bitMatrixHeight) {
val offset = y * bitMatrixWidth
for (x in 0 until bitMatrixWidth) {
pixels[offset + x] = if (bitMatrix.get(x, y))
ContextCompat.getColor(this, R.color.black)
else
ContextCompat.getColor(this, R.color.white)
}
}
val bitmap = Bitmap.createBitmap(bitMatrixWidth, bitMatrixHeight, Bitmap.Config.ARGB_8888)
bitmap.setPixels(pixels, 0, 500, 0, 0, bitMatrixWidth, bitMatrixHeight)
return bitmap
}
Ở đây, chúng tôi mã hóa cả dữ liệu và BarcodeFormat vì chúng tôi muốn trở thành tệp bitMatrix.
val bitMatrix: BitMatrix
try {
bitMatrix = MultiFormatWriter().encode(
value,
BarcodeFormat.QR_CODE,
500, 500, null
)
} catch (e: IllegalArgumentException) {
return null
}
val bitmap = generatedQR(args)
imageView.setImageBitmap(bitmap)
Đối với Máy quét, chúng ta cần sử dụng thư viện này.
implementation 'com.journeyapps:zxing-android-embedded:3.6.0'
val scanner = IntentIntegrator(this)
scanner.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE)
scanner.setBeepEnabled(true) //optional
scanner.initiateScan()
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (resultCode == Activity.RESULT_OK) {
val result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data)
if (result != null) {
if (result.contents == null) {
toast("Cancelled !")
} else {
textView.text = "Your data from scanner is ${result.contents}" //do whatever you want with the data
}
} else {
super.onActivityResult(requestCode, resultCode, data)
}
}
}
Nhân tiện, tôi đã viết mã đó vào một dự án khoảng 4 năm trước. Vui lòng mong đợi một số cách sử dụng không dùng nữa của lớp/hàm nếu có và có thể có cách tiếp cận mới cho việc này, một trong số đó là sử dụng bộ ML từ jetpack.
Đây là mã đầy đủ của mã được giải thích ở trên.
—

![Dù sao thì một danh sách được liên kết là gì? [Phần 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































