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

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

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

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

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

カスタム UI が必要なより複雑なユースケースでは、ML Kit Barcode Scanning API を直接使用することをおすすめします。

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

始める前に

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

アプリを設定する

  1. トップレベルの settings.gradle ファイルの dependencyResolutionManagement ブロックに、Google の Maven リポジトリMaven セントラル リポジトリをインクルードします。

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