Leitor de código do Google (somente Android)

A API Google Code Scanner oferece uma solução completa para leitura de 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 ao 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 com o 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 Barcode Scanning do ML Kit.

Se você tiver dúvidas, quiser enviar um bug ou precisar de ajuda, confira 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 do 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 está 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();