ローライト ブースト クライアントを作成して使用する

Google ローライト ブーストを使用するには、ローライト ブースト クライアントが必要です。クライアントを使用して、ローライト ブースト モジュールがインストールされているかどうかを確認できます。また、アプリが実行されているデバイスとカメラで Google ローライト ブーストがサポートされているかどうかを確認できます。クライアントを使用して LowLightBoostSession を作成します。 (セッションを使用して、ローライト ブーストのオンとオフを切り替えます)。また、ローライト ブーストが有効なときにコールバックを受け取るようにリスナーを設定することもできます。

LowLightBoostClient メソッドは、成功または失敗を直接通知しません。代わりに、Task オブジェクトを返します。Task を使用して、成功リスナーと失敗リスナーを設定します。これにより、メソッドは成功または失敗を非同期で通知できます。これは、メソッドが Google Play 開発者サービスと通信する必要があるためです。

依存関係

Kotlin

dependencies {
  val low_light_boost_version = "16.0.1-beta04"
  implementation("org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.10.2")
  implementation("com.google.android.gms:play-services-base:18.7.0")
  implementation("com.google.android.gms:play-services-camera-low-light-boost:${low_light_boost_version}")
  implementation("com.google.android.gms:play-services-tasks:18.3.0")
}

Groovy

dependencies {
  def low_light_boost_version = "16.0.1-beta04"
  implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.10.2'
  implementation 'com.google.android.gms:play-services-base:18.7.0'
  implementation 'com.google.android.gms:play-services-camera-low-light-boost:${low_light_boost_version}'
  implementation 'com.google.android.gms:play-services-tasks:18.3.0'
}

LowLightBoostClient は、Google Play 開発者サービスの com.google.android.gms.cameralowlight パッケージによって提供されます。Google Play 開発者サービス API へのアクセスについては、Google Play 開発者サービスのドキュメントをご覧ください。

クライアントの作成

それ以外の操作を行うには、ローライト ブースト クライアントが必要です。次のコードはクライアントを作成します。

Kotlin

val lowLightBoostClient = LowLightBoost.getClient(context)

Java

LowLightBoostClient lowLightBoostClient = LowLightBoost.getClient(context);

このコードに関する主なポイント

  • LowLightBoost クラスには、LowLightBoostClient のインスタンスを返す静的メソッド getClient が用意されています。

ローライト ブーストがサポートされているかどうかを確認する

クライアントを取得したら、アプリが実行されているデバイスでローライト ブーストがサポートされているかどうかを確認できます。次のコードは、ローライト ブーストがサポートされているかどうかを確認します。

Kotlin

launch {
    try {
        // Await the result of the Task in a non-blocking way.
        val isSupported: Boolean = lowLightBoostClient
            .isCameraSupported(cameraId).await()
        Log.d(TAG, "isCameraSupported: $isSupported")
        if (isSupported) {
            // Create the low light boost session here.
        }
    } catch (e: Exception) {
        Log.e(TAG, "isCameraSupported failed", e)
    }
}

Java

lowLightBoostClient
  .isCameraSupported(cameraId)
  .addOnSuccessListener(
    lowLightBoostExecutor,
    (isSupported) -> {
      Log.d(TAG, "isCameraSupported: " + isSupported);
      if (isSupported) {
        // Create the low light boost session here
      }
    )

このコードに関する主なポイント

  • cameraId は、別の場所で作成された Camera2 カメラの ID であると想定されます。
  • LowLightBoostClient.isCameraSupported() は、Camera2 カメラがローライト ブーストをサポートしているかどうかを確認します。デバイスがローライト ブーストをサポートしていても、カメラの 1 つがサポートしていない場合があるため、両方を確認する必要があります。
  • LowLightBoostClient.isCameraSupported() メソッドは Task オブジェクトを返します。このオブジェクトを使用して、成功リスナーと失敗リスナーを設定します。成功リスナー内でローライト ブースト セッションを作成します。

ローライト ブースト モジュールがインストールされているかどうかを確認する

クライアントを取得したら、デバイスにローライト ブースト モジュールがインストールされているかどうかを確認できます。次のコードは、モジュールがインストールされているかどうかを確認します。

Kotlin

// Handle the Google Play services Task API with Kotlin coroutines
// (kotlinx-coroutines-play-services).
launch {
    try {
        val isInstalled: Boolean = lowLightBoostClient
            .isModuleInstalled().await()

        if (isInstalled) {
            Log.d(TAG, "Module is installed")
            try {
                openCamera(cameraId)
            } catch (e: CameraAccessException) {
                Log.e(TAG, "Failed to open camera", e)
            }
        } else {
            Log.d(TAG, "Module is not installed")
            launchInstallRequest()
        }
    } catch (e: Exception) {
        Log.e(TAG, "Failed to check module availability", e)
    }
}

Java

lowLightBoostClient
  .isModuleInstalled(context)
  .addOnSuccessListener(
    (isInstalled) -> {
      if (isInstalled) {
        Log.d(TAG, "Module is installed");
        try {
          openCamera(cameraId);
        } catch (CameraAccessException e) {
          Log.e(TAG, "Failed to open camera", e);
        }
      } else {
        Log.d(TAG, "Module is not installed");
        launchInstallRequest();
      }
    })
  .addOnFailureListener(
    (e) -> {
      Log.e(TAG, "Failed to check module availability", e);
    });

このコードに関する主なポイント

  • このコードは、cameraId で識別されるカメラに接続するカメラ セッションを開きます。詳しくは、Camera2 のドキュメントをご覧ください。
  • LowLightBoostClient.isModuleInstalled() メソッドは Task オブジェクトを返します。このオブジェクトを使用して、成功リスナーと失敗リスナーを設定します。
  • Task.addOnSuccessListener() を使用して、isModuleInstalled() の呼び出しが成功した場合に呼び出されるリスナーを設定します。重要なのは、成功リスナーが呼び出された場合、クライアントがデバイスにモジュールがインストールされているかどうかを検出できたことを示しているだけであるということです。リスナーの本文で、モジュールが実際にインストールされているかどうかを確認する必要があります。
  • モジュールがまだインストールされていない場合、このスニペットはメソッド launchInstallRequest() を呼び出してモジュールをインストールします。このメソッドは、ローライト ブースト モジュールをインストールするのスニペットで定義されています。

ローライト ブースト モジュールをインストールする

ローライト ブースト モジュールがデバイスにインストールされていない場合は、Google Play 開発者サービスからダウンロードしてインストールする必要があります。次のコードは、その方法を示しています。

Kotlin

private suspend fun launchInstallRequest() {
    Log.v(TAG, "Launching install request")

    try {
        // Check if this device can support Google LLB.
        val isDeviceSupported: Boolean = lowLightBoostClient
            .isDeviceSupported().await()

        if (isDeviceSupported) {
            Log.d(TAG, "Device is supported")
            // Show download indicator, if needed.

            try {
                val isInstallSuccessful: Boolean = lowLightBoostClient
                    .installModule(
                        createInstallStatusCallback()
                    ).await()

                if (isInstallSuccessful) {
                    Log.d(TAG, "Module installed")
                    // Hide download indicator, if needed.
                    try {
                        openCamera()
                    } catch (e: CameraAccessException) {
                        Log.e(TAG, "Failed to open camera", e)
                    }
                } else {
                    Log.d(TAG, "Module install failed")
                }
            } catch (e: Exception) {
                Log.e(TAG, "An error occurred installing the module:", e)
            }
        } else {
            Log.d(TAG, "Device is not supported")
        }
    } catch (e: Exception) {
        Log.e(TAG, "An error occurred checking device support:", e)
    }
}

Java

private void launchInstallRequest() {
  Log.v(TAG, "Launching install request");
  // Check if this device can support Google LLB.
  lowLightBoostClient
    .isDeviceSupported(context)
    .addOnSuccessListener(
      (isDeviceSupported) -> {
        if (isDeviceSupported) {
          Log.d(TAG, "Device is supported");
          // Show download indicator, if needed.
          lowLightBoostClient
            .installModule(
              this,
              createInstallStatusCallback()
            )
            .addOnSuccessListener(
              (result) -> {
                if (result) {
                  Log.d(TAG, "Module installed");
                  // Hide download indicator, if needed.
                  try {
                    openCamera();
                  } catch (CameraAccessException e) {
                    Log.e(TAG, "Failed to open camera", e);
                  }
                } else {
                  Log.d(TAG, "Module install failed");
                }
              }
            );
        } else {
          Log.d(TAG, "Device is not supported");
        }
      })
    .addOnFailureListener(
      (e) -> {
        Log.e(TAG, "Failed to check device support", e);
      });
}

このコードに関する主なポイント

  • LowLightBoostClient.installModule() を呼び出すときに、LowLightBoostClient.InstallStatusCallback を実装するコールバック オブジェクトを渡します。installModule() は、そのコールバックのメソッドを呼び出して、ダウンロードのステータスを示します。たとえば、ダウンロードが一時停止されると、installModule() はコールバック オブジェクトの onDownloadPause() メソッドを呼び出します。
  • このコード スニペットでは、コールバック オブジェクトは createInstallStatusCallback() メソッドによって作成されます。このメソッドは、次のように自分で作成する必要があります。

Kotlin

private fun createInstallStatusCallback(): LowLightBoostClient.InstallStatusCallback =
    object : LowLightBoostClient.InstallStatusCallback {
        override fun onDownloadPending() {
            Log.d(TAG, "onDownloadPending")
            // Code here...
        }

        override fun onDownloadStart() {
            Log.d(TAG, "onDownloadStart")
            // Code here...
        }

        // other overrides here...
        // ...
    }

Java

private InstallStatusCallback createInstallStatusCallback() {
  new LowLightBoostClient.InstallStatusCallback() {
    @Override
    public void onDownloadPending() {
      Log.d(TAG, "onDownloadPending");
      // Code here...
    }

    @Override
    public void onDownloadStart() {
      Log.d(TAG, "onDownloadStart");
      // Code here...
    }

  // other overrides here...
}
  • LowLightBoostClient.isDeviceSupported() は、Android 搭載デバイスとオペレーティング システムが Google ローライト ブーストをサポートしているかどうかを確認します。そうでない場合は、モジュールをダウンロードしないでください。

  • LowLightBoostClient.installModule() メソッドは Task オブジェクトを返します。このオブジェクトを使用して、成功リスナーと失敗リスナーを設定します。

  • インストールが完了すると、成功リスナーがカメラを開いてインストールを確認します。このスニペットでは、openCamera() を呼び出すことでこれを行っています。このメソッドは自分で作成する必要があります。