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

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

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

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

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

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

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

Прежде чем начать

Для подготовки приложения выполните действия, описанные в следующих разделах.

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

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

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

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

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

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

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

Отсканируйте код

Для сканирования штрихкода выполните следующие шаги.

  1. Необязательно: настройте сканер кодов.

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

    Котлин

    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() как показано в следующем примере кода.

    Котлин

    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 , как показано в примере кода:

    Котлин

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

    Котлин

    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 .

    Котлин

    val rawValue: String? = barcode.rawValue

    Java

    String rawValue = barcode.getRawValue();