Implementasi Kode QR di Android

Mar 01 2023
Belakangan ini penggunaan QR code semakin marak, mulai dari pembayaran, menu restoran hingga mekanisme check-in/check-out yang mulai digunakan di beberapa kantor atau pintu masuk tempat umum. Pada dasarnya QR Code memfasilitasi proses pemberian data kepada konsumen dengan gambar unik yang merepresentasikan data itu sendiri, dimana data tersebut akan dikelola oleh konsumen untuk pada akhirnya dapat menentukan tindakan apa yang perlu diambil.

Belakangan ini penggunaan QR code semakin marak, mulai dari pembayaran, menu restoran hingga mekanisme check-in/check-out yang mulai digunakan di beberapa kantor atau pintu masuk tempat umum.

Pada dasarnya QR Code memfasilitasi proses pemberian data kepada konsumen dengan gambar unik yang merepresentasikan data itu sendiri, dimana data tersebut akan dikelola oleh konsumen untuk pada akhirnya dapat menentukan tindakan apa yang perlu diambil.

Pada dasarnya, QRCode hanyalah representasi data dalam bentuk gambar yang unik.

Dalam pengembangan Android, kita dapat menguasai dua fungsi untuk diimplementasikan secara independen di pihak kita.

Generator

Untuk generate QR Code, kita bisa menggunakan library dari google ini.

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
    }

Di sini kami menyandikan data dan BarcodeFormat seperti yang kami inginkan menjadi 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)

Adapun Pemindai, kita perlu menggunakan perpustakaan ini.

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)
            }
        }
    }

Omong-omong, saya telah menulis kode itu ke dalam satu proyek sekitar 4 tahun yang lalu. Harap perkirakan beberapa penggunaan kelas/fungsi yang tidak digunakan lagi jika ada dan mungkin ada pendekatan baru untuk ini, salah satunya adalah menggunakan kit ML dari jetpack.

Berikut adalah kode lengkap dari kode yang dijelaskan di atas.

—