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 seu app solicite a permissão de câmera, preservando a privacidade do usuário. Isso é feito delegando a tarefa de leitura do código para os 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 ou os dados de imagem. A API oferece suporte aos mesmos formatos de código da API de leitura de código de barras do Kit de ML e retorna o mesmo objeto Barcode.

Essa API é ideal para apps que exigem a leitura de código sem a necessidade de uma interface ou experiência de câmera personalizada. A implementação fica totalmente dentro dos Serviços do Google Play, garantindo o impacto mínimo no tamanho do 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 leia automaticamente códigos de barras que estão longe da câmera. Quando os usuários apontarem os dispositivos para um código de barras, o leitor vai detectar e ampliar o código de barras de forma inteligente. Isso elimina a necessidade de ajustes manuais de zoom, tornando a leitura de código de barras mais rápida, precisa e acessível (consulte 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 a API de leitura de código de barras do Kit de ML diretamente.

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. É possível configurar o app para que o Google Play Services faça o download automático do módulo do 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>
    

    Também é possível verificar explicitamente a disponibilidade do módulo do scanner e solicitar o download usando a API ModuleInstallClient do Google Play Services.

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

Ler um código

Siga as etapas abaixo para ler 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 códigos QR, 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 abaixo.

    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 a leitura de um 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();