Сканер кода Google (только для Android)

Google Code Scanner API – это комплексное решение для сканирования кодов, которое не требует от приложения разрешения на доступ к камере и обеспечивает конфиденциальность пользователей. Для этого задача сканирования кода делегируется сервисам Google Play, а в приложение возвращаются только результаты сканирования (видео 1). Изображения обрабатываются непосредственно на устройстве. Google не хранит результаты сканирования и не предоставляет доступ к изображениям. API поддерживает те же форматы кодов, что и ML Kit Barcode Scanning API, и возвращает тот же объект Barcode.

Этот API идеально подходит для приложений, которым требуется удобное сканирование кодов без необходимости в пользовательском интерфейсе или камере. Реализация полностью находится в сервисах Google Play, что обеспечивает минимальное влияние на размер вашего приложения.

Начиная с версии 16.1.0 вы можете включить автозум, чтобы сканер кода Google автоматически сканировал штрихкоды, которые находятся далеко от камеры. Когда пользователь наводит камеру на штрихкод, сканер автоматически распознает его и увеличивает изображение. Это устраняет необходимость ручной настройки масштабирования, делая сканирование штрихкодов более быстрым, точным и доступным (см. видео 2).

Видео 1. Интеграция со сканером кодов Google Видео 2. Эффект автозума

Для более сложных сценариев, требующих специального пользовательского интерфейса, мы рекомендуем использовать ML Kit Barcode Scanning API напрямую.

Если у вас есть вопросы, вы хотите сообщить об ошибке или вам нужна помощь, посетите страницу сообщества ML Kit.

Подготовка

Чтобы подготовить приложение, выполните нужные действия в разделах, указанных ниже.

Настройка приложения

  1. Добавьте репозиторий Google Maven и центральный репозиторий Maven в блок dependencyResolutionManagement файла settings.gradle верхнего уровня:

    dependencyResolutionManagement {
      repositories {
        google()
        mavenCentral()
      }
    }
    
  2. Добавьте зависимость сервисов Google Play для play-services-code-scanner SDK в файл build.gradle модуля – обычно это app/build.gradle:

    dependencies {
      implementation 'com.google.android.gms:play-services-code-scanner:16.1.0'
    }
    
  3. Вы можете настроить приложение так, чтобы сервисы Google Play автоматически скачивали модуль сканера на устройство при установке приложения из Google Play.

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

    Вы также можете проверить доступность модуля сканера и запросить его скачивание через ModuleInstallClient API сервисов Google Play.

    Если вы не включите скачивание модуля при установке или не запросите явное скачивание, а модуль сканера ещё не установлен для другого варианта использования, сервисы Google Play скачают модуль сканера при первом использовании.

Отсканировать код

Чтобы отсканировать штрихкод, выполните следующие действия:

  1. При необходимости настройте сканер кодов.

    Если вы знаете, какие форматы штрихкодов нужно считывать, вы можете настроить детектор штрихкодов так, чтобы он распознавал только эти форматы. Это позволит повысить скорость работы детектора. Например, чтобы распознавать только коды Aztec и QR-коды, создайте объект GmsBarcodeScannerOptions, как показано ниже.

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

    По умолчанию автозум отключен. Чтобы включить его в версии 16.1.0 и более поздних, вызовите enableAutoZoom(), как показано в примере кода ниже.

    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. Получите экземпляр GmsBarcodeScanner, как показано в примере кода:

    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. Запросите сканирование кода по телефону 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. Обработайте полученный объект Barcode.

    Kotlin

    val rawValue: String? = barcode.rawValue

    Java

    String rawValue = barcode.getRawValue();