Implementación de código QR en Android
Recientemente, el uso de códigos QR se ha generalizado cada vez más, abarcando desde pagos, menús de restaurantes hasta mecanismos de check-in/check-out que han comenzado a utilizarse en varias oficinas o entradas a lugares públicos.
Básicamente, QR Code facilita el proceso de proporcionar datos a los consumidores con una imagen única que representa los datos en sí mismos, donde el consumidor administrará los datos para, en última instancia, poder determinar qué acción debe tomarse.
Básicamente, QRCode es solo una representación de datos en forma de imágenes únicas.
En el desarrollo de Android, podemos experimentar las dos funciones para que se implementen de forma independiente de nuestro lado.
Generador
Para generar código QR, podemos usar esta biblioteca de 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
}
Aquí codificamos tanto los datos como el BarcodeFormat como queremos que sea un archivo 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)
En cuanto al Escáner, necesitamos usar esta biblioteca.
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)
}
}
}
Por cierto, escribí ese código en un proyecto hace unos 4 años. Espere algunos usos obsoletos de la clase/función, si los hay, y tal vez haya un nuevo enfoque para esto, uno de ellos es usar el kit ML de jetpack.
Aquí está el código completo del código explicado anteriormente.
—

![¿Qué es una lista vinculada, de todos modos? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































