Escáner de códigos de Google (solo para Android)

La API de escáner de código de Google proporciona una solución completa para escanear código sin que tu app solicite permiso de acceso a la cámara y, a la vez, preserva la privacidad del usuario. Esto se logra delegando la tarea de escanear el código a los Servicios de Google Play y mostrar solo los resultados del análisis a tu app (Video 1). Todo el procesamiento de imágenes se realiza en el dispositivo, y Google no almacena los resultados ni los datos de imágenes. La API admite los mismos formatos de código que la API de escaneo de códigos de barras del ML Kit y muestra el mismo objeto Barcode.

Esta API es ideal para las apps que requieren un análisis de código fluido sin necesidad de una IU personalizada o una experiencia de cámara. La implementación reside por completo en los Servicios de Google Play, lo que garantiza un impacto mínimo en el tamaño de la app.

A partir de la versión 16.1.0, puedes habilitar el zoom automático para permitir que el escáner de código de Google escanee automáticamente los códigos de barras que están lejos de la cámara. Cuando los usuarios apuntan sus dispositivos a un código de barras, el escáner detecta y acerca el código de barras de forma inteligente. Esto elimina la necesidad de realizar ajustes manuales de zoom, lo que hace que el escaneo de códigos de barras sea más rápido, preciso y accesible (consulta el video 2).

Video 1: Integración del escáner de código de Google Video 2: Efecto de zoom automático

Para casos de uso más complejos que requieren una IU personalizada, te recomendamos usar directamente la API de escaneo de códigos de barra del Kit de AA.

Si tienes preguntas, deseas enviar un error o necesitas asistencia, consulta la página de la comunidad del Kit de AA.

Antes de comenzar

Para preparar tu app, completa los pasos que se indican en las siguientes secciones.

Cómo configurar tu app

  1. En el archivo settings.gradle de nivel superior, incluye el repositorio de Maven de Google y el repositorio central de Maven en el bloque dependencyResolutionManagement:

    dependencyResolutionManagement {
      repositories {
        google()
        mavenCentral()
      }
    }
    
  2. Agrega la dependencia de los Servicios de Google Play para el SDK play-services-code-scanner al archivo de compilación de Gradle de tu módulo, que suele ser app/build.gradle:

    dependencies {
      implementation 'com.google.android.gms:play-services-code-scanner:16.1.0'
    }
    
  3. Puedes configurar tu app para que los Servicios de Google Play descarguen automáticamente el módulo de análisis en el dispositivo mientras se instala desde Play Store.

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

    También puedes verificar de forma explícita la disponibilidad del módulo de análisis y solicitar su descarga a través de la API ModuleInstallClient de los Servicios de Google Play.

    Si no habilitas las descargas del módulo en el momento de la instalación o solicitas descargas explícitas, y el módulo de análisis aún no está instalado para otro caso de uso, los Servicios de Google Play descargarán el módulo de análisis la primera vez que se use.

Escanear un código

Implementa los siguientes pasos para escanear un código de barras.

  1. Opcional: Configura el escáner de código.

    Si sabes qué formatos de códigos de barras leerás, puedes mejorar la velocidad del detector de códigos de barras configurándolo para que solo detecte esos formatos. Por ejemplo, para detectar solo códigos QR y Aztec, crea un objeto GmsBarcodeScannerOptions como el del siguiente ejemplo:

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

    De forma predeterminada, el zoom automático está desactivado. Para habilitar la función de zoom automático a partir de la versión 16.1.0, llama a enableAutoZoom() como se muestra en el siguiente ejemplo de código.

    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. Obtén una instancia de GmsBarcodeScanner, como se muestra en el ejemplo de código:

    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. Llama a startScan() para solicitar un análisis de código.

    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. Controla el Barcode resultante.

    Kotlin

    val rawValue: String? = barcode.rawValue
    

    Java

    String rawValue = barcode.getRawValue();