QR-Code-Implementierung in Android

Mar 01 2023
In letzter Zeit ist die Verwendung von QR-Codes immer weiter verbreitet und reicht von Zahlungen über Restaurantmenüs bis hin zu Check-in-/Check-out-Mechanismen, die mittlerweile in mehreren Büros oder Eingängen zu öffentlichen Plätzen eingesetzt werden. Grundsätzlich erleichtert QR-Code den Prozess der Bereitstellung von Daten für Verbraucher mit einem einzigartigen Bild, das die Daten selbst darstellt, wobei die Daten vom Verbraucher verwaltet werden, um letztendlich bestimmen zu können, welche Maßnahmen ergriffen werden müssen.

In letzter Zeit ist die Verwendung von QR-Codes immer weiter verbreitet und reicht von Zahlungen über Restaurantmenüs bis hin zu Check-in-/Check-out-Mechanismen, die mittlerweile in mehreren Büros oder Eingängen zu öffentlichen Plätzen eingesetzt werden.

Grundsätzlich erleichtert QR-Code den Prozess der Bereitstellung von Daten für Verbraucher mit einem einzigartigen Bild, das die Daten selbst darstellt, wobei die Daten vom Verbraucher verwaltet werden, um letztendlich bestimmen zu können, welche Maßnahmen ergriffen werden müssen.

Grundsätzlich handelt es sich bei QRCode nur um die Darstellung von Daten in einzigartiger Bildform.

Bei der Android-Entwicklung können wir die beiden Funktionen auf unserer Seite unabhängig voneinander implementieren lassen.

Generator

Zum Generieren von QR-Code können wir diese Bibliothek von Google verwenden.

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
    }

Hier kodieren wir sowohl die Daten als auch das BarcodeFormat so, wie wir es wollen 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)

Für den Scanner müssen wir diese Bibliothek verwenden.

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

Übrigens habe ich diesen Code vor etwa 4 Jahren in ein Projekt geschrieben. Bitte rechnen Sie mit einigen veralteten Verwendungen der Klasse/Funktion, falls vorhanden, und möglicherweise gibt es dafür einen neuen Ansatz, einer davon ist die Verwendung des ML-Kits von Jetpack.

Hier ist der vollständige Code des oben erläuterten Codes.

—