• Stars
    star
    123
  • Rank 289,297 (Top 6 %)
  • Language
    Kotlin
  • License
    Apache License 2.0
  • Created about 5 years ago
  • Updated over 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

AndroidX and Camera2 based library for easy barcode scanning. Includes BarcodeView and different ready to use dialogs.

Publish License

Artifact Version
com.kroegerama:barcode-kaiteki Maven Central

Barcode-Kaiteki

An easy to use library for barcode detection. Based on the new AndroidX Camera2 api. Uses the zxing barcode detection library.

Comes with a BarcodeView, which combines a camera preview and an automatic overlay for detected barcodes.

Also contains three differend ready to use dialogs:

  • BarcodeDialog (DialogFragment)
  • BarcodeBottomSheet (BottomSheetDialogFragment)
  • BarcodeAlertDialog (AlertDialog)
  • BarcodeFragment (Fragment)

  

Features

  • camera permission handling
  • customize the displayed result points
  • customize the barcode type (can be a list)
  • allows scanning of inverted barcodes (white barcode on black background)

Add library dependency

barcode-kaiteki is distributed via MavenCentral. Just add it a as a dependency:

dependencies {
    implementation("com.kroegerama:barcode-kaiteki:<version>")
}

Usage

BarcodeDialog

Just let your Activity/Fragment implement BarcodeResultListener.

class MainActivity : AppCompatActivity(), BarcodeResultListener {

    //...

    override fun onBarcodeResult(result: Result): Boolean {
        Log.d(TAG, "Result: $result")

        //return false to not automatically close the dialog
        return false
    }
}

Then it is as easy as showing one of the provided dialogs.

//show a Barcode FragmentDialog (with swipe to dismiss)
BarcodeDialog.show(
    childFragmentManager,
    formats = listOf(BarcodeFormat.QR_CODE),
    barcodeInverted = false
)

//show a Barcode BottomSheet
BarcodeBottomSheet.show(
    childFragmentManager,
    formats = listOf(BarcodeFormat.QR_CODE),
    barcodeInverted = false
)

//show an AlertDialog from activity
showBarcodeAlertDialog(
    owner = this,
    listener = this,
    formats = listOf(BarcodeFormat.QR_CODE),
    barcodeInverted = false
)
//or from a Fragment
requireContext().showBarcodeAlertDialog(
    owner = this,
    listener = this,
    formats = listOf(BarcodeFormat.QR_CODE),
    barcodeInverted = false
)

//show a Barcode Fragment
val barcodeFragment = BarcodeFragment.makeInstance(
    formats = listOf(BarcodeFormat.QR_CODE),
    barcodeInverted = false
)
supportFragmentManager.beginTransaction()
    .replace(R.id.container, barcodeFragment)
    .commit()
BarcodeView

You can also use the BarcodeView directly in your Layout.

<com.kroegerama.kaiteki.bcode.views.BarcodeView
    android:id="@+id/bcode"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:resultPointColor="#09E85E"
    app:resultPointSize="8dp"
    app:showResultPoints="true" />

Then add in your onCreate/onViewCreated: bcode.bindToLifecycle(this) and in your onStop: bcode.unbind().

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    bcode.setFormats(listOf(BarcodeFormat.QR_CODE,  BarcodeFormat.AZTEC))
    bcode.setBarcodeResultListener(this)
    bcode.bindToLifecycle(this)
}

override fun onStop() {
    super.onStop()
    bcode.unbind()
}