
The Google code scanner API provides a complete solution for scanning codes without requiring your app to request camera permission, while preserving user privacy. This is accomplished by delegating the task of scanning the code to Google Play services and returning only the scan results to your app. All image processing occurs on the device and Google doesn't store the results or image data. The API supports the same code formats as the ML Kit Barcode Scanning API and returns the same Barcode object.
This API is ideal for apps that simply need to scan a code and don’t require a custom UI or camera experience. The implementation resides entirely within Google Play services, so there is no significant impact to the size of your app. For more complex use cases that require a custom UI, use the ML Kit Barcode Scanning API directly.
If you have questions, want to submit a bug or need assistance, check the ML Kit community page.
Before you begin
To prepare your app, complete the steps in the following sections.
Configure your app
In your top-level
settings.gradle
file, include Google's Maven repository and Maven central repository in under thedependencyResolutionManagement
block:dependencyResolutionManagement { repositories { google() mavenCentral() } }
Add the Google Play services dependency for the
play-services-code-scanner
SDK to your module's Gradle build file, which is commonlyapp/build.gradle
:dependencies { implementation 'com.google.android.gms:play-services-code-scanner:16.0.0' }
You can configure your app to have Google Play services automatically download the scanner module to the device while your app is installed from the Play Store.
<application ...> ... <meta-data android:name="com.google.mlkit.vision.DEPENDENCIES" android:value="barcode_ui"/> ... </application>
You can also explicitly check the scanner module availability and request download through Google Play services ModuleInstallClient API.
If you don't enable install-time module downloads or request explicit download, Google Play services will download the scanner module the first time it is used, if it has not already been installed for another use case.
Scan a code
1. (Optional) Configure the code scanner
If you know which barcode formats you expect to read, you can improve the speed of the barcode detector by configuring it to only detect those formats. For example, to detect only Aztec code and QR codes, build a GmsBarcodeScannerOptions object as in the following example:
Kotlin
val options = GmsBarcodeScannerOptions.Builder() .setBarcodeFormats( Barcode.FORMAT_QR_CODE, Barcode.FORMAT_AZTEC) .build()
Java
GmsBarcodeScannerOptions options = new GmsBarcodeScannerOptions.Builder() .setBarcodeFormats( Barcode.FORMAT_QR_CODE, Barcode.FORMAT_AZTEC) .build();
2. Get an instance of GmsBarcodeScanner
Kotlin
val scanner = GmsBarcodeScanning.getClient(this) // Or with a configured options // val scanner = GmsBarcodeScanning.getClient(this, options)
Java
GmsBarcodeScanner scanner = GmsBarcodeScanning.getClient(this); // Or with a configured options // GmsBarcodeScanner scanner = GmsBarcodeScanning.getClient(context, options);
3. Request a code scanning by calling startScan()
Kotlin
scanner.startScan() .addOnSuccessListener { barcode -> // Task completed successfully } .addOnCanceledListener { // Task canceled } .addOnFailureListener { e -> // Task failed with an exception }
Java
scanner .startScan() .addOnSuccessListener( barcode -> { // Task completed successfully }) .addOnCanceledListener( () -> { // Task canceled }) .addOnFailureListener( e -> { // Task failed with an exception });
4. Handle the resulting Barcode
Kotlin
val rawValue: String? = barcode.rawValue
Java
String rawValue = barcode.getRawValue();