Сканер кода 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();