Skip to content

QR reader library with CameraX & Firebase ML for Android.

License

Notifications You must be signed in to change notification settings

murgupluoglu/qrreader-android

Repository files navigation

QR Reader

Min API Level = 21

Preview

Setup

Add the JitPack repository to your project level build.gradle:

allprojects {
 repositories {
    google()
    jcenter()
    maven { url "https://jitpack.io" }
 }
}

Add this to your app build.gradle:

dependencies {
	implementation 'com.github.murgupluoglu:qrreader-android:lastVersion'
}

Usage

This library using Camera permission. Please grant permission before start.

<uses-permission android:name="android.permission.CAMERA"/>

Step 1

Add QRReaderFragment to your XML like any other fragment.

<androidx.constraintlayout.widget.ConstraintLayout
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical">

    <fragment
        android:id="@+id/qrCodeReaderFragment"
        android:layout_width="0dp"
        android:name="com.murgupluoglu.qrreader.QRReaderFragment"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

Step 2

Define your fragment for access later

val qrCodeReader : QRReaderFragment by lazy {
    qrCodeReaderFragment as QRReaderFragment
}

Step 3

Add listener for returned qr code.

qrCodeReaderView.setListener(object : QRReaderListener{
    override fun onRead(barcode: FirebaseVisionBarcode, barcodes: List<FirebaseVisionBarcode>) {

  }

    override fun onError(exception: Exception) {

    }
})

Step 3

Start camera

qrCodeReaderView.startCamera(this@MainActivity)

Optional

Set configuration and enable torch

val qrOptions: BarcodeScannerOptions = BarcodeScannerOptions.Builder()
    .setBarcodeFormats(
        Barcode.FORMAT_QR_CODE,
        Barcode.FORMAT_AZTEC)
    .build()
val config = QRCameraConfiguration(lensFacing = CameraSelector.LENS_FACING_FRONT, options = qrOptions)

qrCodeReaderView.startCamera(this@MainActivity, config)

qrCodeReaderView.enableTorch(true)

Use Inside Your CameraX Setup

If you have CameraX setup in your code. You can use only QRAnalyzer class.

imageAnalyzer.setAnalyzer(mainExecutor, QRAnalyzer(rotation, config.options).apply {  
  onFrameAnalyzed { qrStatus, barcode, barcodes, exeption ->  
  
})