Implementacja kodu QR w systemie Android
Ostatnio stosowanie kodów QR staje się coraz bardziej powszechne, począwszy od płatności, menu restauracji, a skończywszy na mechanizmach zameldowania/wymeldowania, które zaczęto stosować w kilku biurach lub wejściach do miejsc publicznych.
Zasadniczo kod QR ułatwia proces dostarczania danych konsumentom za pomocą unikalnego obrazu, który przedstawia same dane, w którym dane będą zarządzane przez konsumenta, aby ostatecznie móc określić, jakie działania należy podjąć.
Zasadniczo QRCode to po prostu reprezentacja danych w unikalnej formie obrazów.
W rozwoju Androida możemy opracować dwie funkcje, które zostaną niezależnie zaimplementowane po naszej stronie.
Generator
Do generowania kodu QR możemy użyć tej biblioteki z 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
}
Tutaj kodujemy zarówno dane, jak i BarcodeFormat, ponieważ chcemy być plikiem 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)
Jeśli chodzi o Skaner, musimy użyć tej biblioteki.
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)
}
}
}
Nawiasem mówiąc, napisałem ten kod w jednym projekcie około 4 lata temu. Proszę spodziewać się przestarzałych zastosowań klasy/funkcji, jeśli takie istnieją, i być może istnieje nowe podejście do tego, jednym z nich jest użycie zestawu ML z plecaka odrzutowego.
Oto pełny kod kodu wyjaśnionego powyżej.
—

![Czym w ogóle jest lista połączona? [Część 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































