Google コードスキャナ(Android のみ)

Google コード スキャナ API は、アプリがカメラの権限をリクエストすることなくコードをスキャンできる完全なソリューションを提供し、ユーザーのプライバシーを保護します。これは、コードのスキャン タスクを Google Play 開発者サービスに委任し、スキャン結果のみをアプリに返すことで実現されます(動画 1)。 画像処理はすべてデバイス上で行われ、Google が結果の保存や画像データの共有を行うことはありません。この API は、 ML Kit バーコード スキャン API と同じコード形式をサポートし、 同じ Barcode オブジェクトを返します。

この API は、カスタム UI やカメラ エクスペリエンスを必要とせずにシームレスなコード スキャンを必要とするアプリに最適です。実装はすべて Google Play 開発者サービス内で行われるため、アプリのサイズへの影響は最小限に抑えられます。

バージョン 16.1.0 以降では、オートズームを有効にして、Google コード スキャナでカメラから離れた場所にあるバーコードを自動的にスキャンできます。ユーザーがデバイスをバーコードに向けると、スキャナがバーコードをインテリジェントに検出してズームインします。これにより、手動でズームを調整する必要がなくなり、バーコードのスキャンがより速く、より正確で、よりアクセスしやすくなります(動画 2 をご覧ください)。

動画 1. Google コード スキャナの統合 動画 2. オートズーム効果

カスタム UI が必要な複雑なユースケースでは、 ML Kit バーコード スキャン API を直接使用することをおすすめします。

ご不明な点がある場合、バグを報告したい場合、サポートが必要な場合は、 ML Kit コミュニティ ページをご覧ください。

始める前に

アプリを準備するには、以下のセクションに示す手順を完了します。

アプリを設定する

  1. トップレベルの settings.gradle ファイルで、 Google の Maven リポジトリMaven セントラル リポジトリdependencyResolutionManagement ブロック以下に含めます。

    dependencyResolutionManagement {
      repositories {
        google()
        mavenCentral()
      }
    }
    
  2. play-services-code-scanner SDK の Google Play 開発者サービスの依存関係をモジュールの 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>
    

    また、Google Play 開発者サービス ModuleInstallClient API を使用して、スキャナ モジュールの可用性を明示的に確認し、 ダウンロードをリクエストすることもできます。

    インストール時のモジュールのダウンロードを有効にしない場合や、明示的なダウンロードをリクエストしない場合、別のユースケースでスキャナ モジュールがまだインストールされていない場合は、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();