Android barcode scanner using Google ML-Kit Vision
Top level build.gradle
allprojects {
repositories {
maven { url 'https://jitpack.io' }
// other repositories
}
}Module level build.gradle
dependencies {
implementation "com.github.javaherisaber:MLBarcodeScanner:1.0.0"
}Create your layout
<androidx.constraintlayout.widget.ConstraintLayout android:layout_height="match_parent"android:layout_width="match_parent"xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools">
<androidx.camera.view.PreviewView
android:id="@+id/previewView_cameraScanning"android:layout_height="0dp"android:layout_width="match_parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintBottom_toBottomOf="parent" />
<com.buildtoapp.mlbarcodescanner.GraphicOverlay
android:id="@+id/graphic_overlay"android:layout_height="0dp"android:layout_width="0dp"app:layout_constraintBottom_toBottomOf="@id/previewView_cameraScanning"app:layout_constraintLeft_toLeftOf="@id/previewView_cameraScanning"app:layout_constraintRight_toRightOf="@id/previewView_cameraScanning"app:layout_constraintTop_toTopOf="@id/previewView_cameraScanning" />
<ImageViewandroid:layout_height="264dp"android:layout_width="264dp"android:src="@drawable/ic_scan_area"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"tools:ignore="ContentDescription" />
</androidx.constraintlayout.widget.ConstraintLayout>
Make sure to grant android.permission.CAMERA and then use the library
classMainActivity : AppCompatActivity() {
privatelateinitvar binding:ActivityMainBindingprivatelateinitvar barcodeScanner:MLBarcodeScanneroverridefunonCreate(savedInstanceState:Bundle?) {
super.onCreate(savedInstanceState)
binding =ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
if (!PermissionUtils.allRuntimePermissionsGranted(this, REQUIRED_RUNTIME_PERMISSIONS)) {
PermissionUtils.getRuntimePermissions(this, REQUIRED_RUNTIME_PERMISSIONS)
}
initBarcodeScanner()
}
privatefuninitBarcodeScanner() {
barcodeScanner =MLBarcodeScanner(
callback = { displayValue, rawValue ->// you can process your barcode here
},
focusBoxSize =MetricUtils.dpToPx(264),
graphicOverlay = binding.graphicOverlay,
previewView = binding.previewViewCameraScanning,
lifecycleOwner =this,
context =this,
drawOverlay =true, // show rectangle around detected barcode
drawBanner =true// show detected barcode value on top of it
)
}
companionobject {
privatevalREQUIRED_RUNTIME_PERMISSIONS= arrayOf(Manifest.permission.CAMERA)
}
}- 2D formats: QR Code, Aztec, Data Matrix, PDF417
- Linear formats: Codabar, Code 39, Code 93, Code 128, EAN-8, EAN-13, EAN-128, ITF, UPC-A, UPC-E
There are two types of dependency for barcode scanning using ML-Kit vision
(with 3-10 MB increase in apk size)
We added this model to the debug variant so that you don't have to wait for GooglePlay services to download it in your testing
(with no increase in apk size but downloaded from Google Play Services on demand)
We added this model to the release variant for end users to reduce apk size
