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.
- BarcodeDialog (DialogFragment)
- BarcodeBottomSheet (BottomSheetDialogFragment)
- BarcodeAlertDialog (AlertDialog)
- BarcodeFragment (Fragment)
- 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 jitpack to your toplevel gradle file (if not already present):
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Add barcode-kaiteki as dependency:
dependencies {
implementation 'com.kroegerama:barcode-kaiteki:<version>'
}
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()
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()
}