Lecteur de code Google (Android uniquement)

L'API Google Code Scanner fournit une solution complète pour scanner du code sans que votre application doive demander l'autorisation d'accéder à l'appareil photo, tout en préservant la confidentialité des utilisateurs. Pour ce faire, déléguez la tâche d'analyse du code aux services Google Play et ne renvoyez que les résultats de l'analyse à votre application (Vidéo 1). Le traitement des images s'effectue intégralement sur l'appareil, et Google ne stocke ni les résultats, ni les données d'image. L'API accepte les mêmes formats de code que l'API de lecture de code-barres ML Kit et renvoie le même objet Barcode.

Cette API est idéale pour les applications qui nécessitent une lecture fluide du code sans nécessiter d'interface utilisateur personnalisée ni d'expérience d'appareil photo. L'implémentation réside entièrement dans les services Google Play, ce qui garantit un impact minimal sur la taille de votre application.

À partir de la version 16.1.0, vous pouvez activer le zoom automatique pour permettre au lecteur de code Google de scanner automatiquement les codes-barres éloignés de l'appareil photo. Lorsque l'utilisateur pointe son appareil vers un code-barres, le lecteur le détecte et zoome dessus intelligemment. Ainsi, il n'est plus nécessaire d'ajuster manuellement le zoom, ce qui rend la lecture des codes-barres plus rapide, plus précise et plus accessible (voir Vidéo 2).

Vidéo 1. Intégration du lecteur de code Google Vidéo 2. Effet de zoom automatique

Pour les cas d'utilisation plus complexes nécessitant une interface utilisateur personnalisée, nous vous recommandons d'utiliser directement l'API Barcode Scanning de ML Kit.

Pour toute question, pour signaler un bug ou pour obtenir de l'aide, consultez la page de la communauté ML Kit.

Avant de commencer

Pour préparer votre application, procédez comme indiqué dans les sections suivantes.

Configurer votre application

  1. Dans le fichier settings.gradle de premier niveau, incluez le dépôt Maven de Google et le dépôt central Maven sous le bloc dependencyResolutionManagement:

    dependencyResolutionManagement {
      repositories {
        google()
        mavenCentral()
      }
    }
    
  2. Ajoutez la dépendance des services Google Play pour le SDK play-services-code-scanner au fichier de compilation Gradle de votre module, qui est généralement app/build.gradle:

    dependencies {
      implementation 'com.google.android.gms:play-services-code-scanner:16.1.0'
    }
    
  3. Vous pouvez configurer votre application pour que les services Google Play téléchargent automatiquement le module du scanner sur l'appareil lorsque votre application est installée à partir du Play Store.

    <application ...>
      ...
      <meta-data
          android:name="com.google.mlkit.vision.DEPENDENCIES"
          android:value="barcode_ui"/>
      ...
    </application>
    

    Vous pouvez également vérifier explicitement la disponibilité du module d'analyse et demander le téléchargement via l'API ModuleInstallClient des services Google Play.

    Si vous n'activez pas les téléchargements de modules au moment de l'installation ou ne demandez pas de téléchargements explicites et que le module d'analyse n'est pas déjà installé pour un autre cas d'utilisation, les services Google Play téléchargent le module d'analyse la première fois qu'il est utilisé.

Scanner un code

Suivez les étapes ci-dessous pour scanner un code-barres.

  1. Facultatif: Configurez le lecteur de code.

    Si vous savez quels formats de codes-barres vous souhaitez lire, vous pouvez améliorer la vitesse du détecteur de codes-barres en le configurant pour qu'il ne détecte que ces formats. Par exemple, pour détecter uniquement le code aztec et les codes QR, créez un objet GmsBarcodeScannerOptions comme dans l'exemple suivant:

    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();
    

    Par défaut, le zoom automatique est désactivé. Pour activer la fonctionnalité de zoom automatique à partir de la version 16.1.0, appelez enableAutoZoom() comme indiqué dans l'exemple de code suivant.

    Kotlin

    val options = GmsBarcodeScannerOptions.Builder()
       .setBarcodeFormats(...)
       .enableAutoZoom() // available on 16.1.0 and higher
       .build()
    

    Java

    GmsBarcodeScannerOptions options = new GmsBarcodeScannerOptions.Builder()
       .setBarcodeFormats(...)
       .enableAutoZoom() // available on 16.1.0 and higher
       .build();
    
  2. Obtenez une instance de GmsBarcodeScanner, comme indiqué dans l'exemple de code:

    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. Demandez à scanner un code en appelant 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. Gérer le Barcode obtenu

    Kotlin

    val rawValue: String? = barcode.rawValue
    

    Java

    String rawValue = barcode.getRawValue();