Implementazione del codice QR in Android
Recentemente si è diffuso sempre più l'uso dei codici QR, che vanno dai pagamenti, ai menu dei ristoranti, ai meccanismi di check-in/check-out che hanno iniziato ad essere utilizzati in diversi uffici o ingressi a luoghi pubblici.
Fondamentalmente, il codice QR facilita il processo di fornitura di dati ai consumatori con un'immagine univoca che rappresenta i dati stessi, dove i dati saranno gestiti dal consumatore per essere in grado di determinare quale azione deve essere intrapresa.
Fondamentalmente, QRCode è solo una rappresentazione di dati in forma di immagini univoche.
Nello sviluppo di Android, possiamo sperimentare che le due funzioni vengano implementate indipendentemente dalla nostra parte.
Generatore
Per generare il codice QR, possiamo utilizzare questa libreria di 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
}
Qui codifichiamo sia i dati che BarcodeFormat come vogliamo essere un file 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)
Per quanto riguarda lo scanner, dobbiamo utilizzare questa libreria.
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)
}
}
}
A proposito, ho scritto quel codice in un progetto circa 4 anni fa. Si prega di aspettarsi alcuni usi deprecati della classe/funzione, se presenti, e forse c'è un nuovo approccio per questo, uno dei quali è l'utilizzo del kit ML di jetpack.
Ecco il codice completo del codice spiegato sopra.
—

![Che cos'è un elenco collegato, comunque? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































