Implementação de código QR no Android
Recentemente, o uso de códigos QR tornou-se cada vez mais generalizado, desde pagamentos, menus de restaurantes até mecanismos de check-in/check-out que começaram a ser usados em vários escritórios ou entradas de locais públicos.
Basicamente, o QR Code facilita o processo de fornecimento de dados aos consumidores com uma imagem única que representa os próprios dados, onde os dados serão gerenciados pelo consumidor para, por fim, poder determinar qual ação precisa ser tomada.
Basicamente, o QRCode é apenas a representação de dados em forma de imagens únicas.
No desenvolvimento do Android, podemos experimentar as duas funções a serem implementadas de forma independente do nosso lado.
Gerador
Para gerar o QR Code, podemos usar esta biblioteca do 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
}
Aqui, codificamos os dados e o BarcodeFormat como queremos que seja um arquivo 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)
Quanto ao Scanner, precisamos 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)
}
}
}
A propósito, escrevi esse código em um projeto há cerca de 4 anos. Espere alguns usos obsoletos da classe/função, se houver, e talvez haja uma nova abordagem para isso, uma delas é usar o kit ML do jetpack.
Aqui está o código completo do código explicado acima.
—





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)