Leitor de código do Google (somente Android)

A API Google Code Scanner oferece uma solução completa para ler códigos sem exigir que o app solicite permissão da câmera, preservando a privacidade do usuário. Isso é feito delegando a tarefa de leitura do código aos Serviços do Google Play e retornando apenas os resultados da leitura para o app (Vídeo 1). Todo o processamento de imagens ocorre no dispositivo, e o Google não armazena os resultados nem os dados das imagens. A API é compatível com os mesmos formatos de código da API Barcode Scanning do ML Kit e retorna o mesmo objeto Barcode.

Essa API é ideal para apps que exigem uma leitura de código perfeita sem a necessidade de uma interface personalizada ou experiência de câmera. A implementação reside totalmente no Google Play Services, garantindo um impacto mínimo no tamanho do seu app.

A partir da versão 16.1.0, é possível ativar o zoom automático para permitir que o leitor de código do Google faça a leitura automática de códigos de barras que estão longe da câmera. Quando os usuários apontam os dispositivos para um código de barras, o scanner detecta e amplia o código de forma inteligente. Isso elimina a necessidade de ajustes manuais de zoom, tornando a leitura de códigos de barras mais rápida, precisa e acessível (confira o Vídeo 2).

Vídeo 1. Integração do leitor de código do Google Vídeo 2. Efeito de zoom automático

Para casos de uso mais complexos que exigem uma interface personalizada, recomendamos usar diretamente a API de leitura de código de barras do ML Kit.

Se você tiver dúvidas, quiser enviar um bug ou precisar de ajuda, consulte a página da comunidade do ML Kit.

Antes de começar

Para preparar o app, siga as etapas nas seções a seguir.

Configurar o app

  1. No arquivo settings.gradle de nível superior, inclua o repositório Maven do Google e o repositório central do Maven no bloco dependencyResolutionManagement:

    dependencyResolutionManagement {
      repositories {
        google()
        mavenCentral()
      }
    }
    
  2. Adicione a dependência do Google Play Services para o SDK play-services-code-scanner ao arquivo de build do Gradle do seu módulo, que geralmente é app/build.gradle:

    dependencies {
      implementation 'com.google.android.gms:play-services-code-scanner:16.1.0'
    }
    
  3. Você pode configurar seu app para que o Google Play Services faça o download automático do módulo de scanner no dispositivo enquanto o app é instalado pela Play Store.

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

    Você também pode verificar explicitamente a disponibilidade do módulo de scanner e solicitar o download usando a API ModuleInstallClient dos Serviços do Google Play.

    Se você não ativar os downloads de módulos no momento da instalação nem solicitar downloads explícitos, e se o módulo de scanner ainda não estiver instalado para outro caso de uso, o Google Play Services vai baixar o módulo de scanner na primeira vez que ele for usado.

Ler um código

Siga estas etapas para fazer a leitura de um código de barras.

  1. Opcional: configure o leitor de códigos.

    Se você sabe quais formatos de código de barras espera ler, aumente a velocidade do detector de código de barras configurando-o para detectar apenas esses formatos. Por exemplo, para detectar apenas o código Aztec e os QR codes, crie um objeto GmsBarcodeScannerOptions como no exemplo a seguir:

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

    Por padrão, o zoom automático fica desativado. Para ativar a funcionalidade de zoom automático a partir da versão 16.1.0, chame enableAutoZoom() conforme mostrado no exemplo de código a seguir.

    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. Receba uma instância de GmsBarcodeScanner, conforme mostrado no exemplo 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. Solicite uma leitura de código chamando 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. Processe o Barcode resultante.

    Kotlin

    val rawValue: String? = barcode.rawValue

    Java

    String rawValue = barcode.getRawValue();