Client für den Modus „Bei wenig Licht“ erstellen und verwenden

Wenn Sie Google Low Light-Modus verwenden möchten, benötigen Sie einen Low Light-Modus-Client. Mit dem Client können Sie prüfen, ob das Low Light-Modus-Modul installiert ist und ob Google Low Light-Modus vom Gerät und der Kamera unterstützt wird, auf dem Ihre App ausgeführt wird. Außerdem verwenden Sie den Client, um eine LowLightBoostSession zu erstellen. (Mit der Sitzung können Sie den Low Light-Modus aktivieren und deaktivieren.) Sie können auch einen Listener einrichten, um Callbacks zu erhalten, wenn der Low Light-Modus aktiv ist.

Die LowLightBoostClient-Methoden signalisieren Erfolg oder Fehler nicht direkt. Stattdessen geben sie ein Task-Objekt zurück. Mit einem Task können Sie Listener für Erfolg und Fehler einrichten. So können die Methoden Erfolg oder Fehler asynchron signalisieren. Das ist erforderlich, da die Methoden mit den Google Play-Diensten kommunizieren müssen.

Abhängigkeiten

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 wird vom Paket com.google.android.gms.cameralowlight der Google Play-Dienste bereitgestellt. Informationen zum Zugriff auf Google Play-Dienste APIs finden Sie in der Dokumentation zu den Google Play-Diensten.

Client erstellen

Für alle anderen Schritte benötigen Sie einen Low Light-Modus-Client. Mit dem folgenden Code wird ein Client erstellt:

Kotlin

val lowLightBoostClient = LowLightBoost.getClient(context)

Java

LowLightBoostClient lowLightBoostClient = LowLightBoost.getClient(context);

Wichtige Informationen zu diesem Code

  • Die LowLightBoost Klasse bietet die statische Methode getClient, die eine Instanz von LowLightBoostClient zurückgibt.

Prüfen, ob der Low Light-Modus unterstützt wird

Sobald Sie einen Client haben, können Sie prüfen, ob der Low Light-Modus vom Gerät unterstützt wird, auf dem die App ausgeführt wird. Mit dem folgenden Code wird geprüft, ob der Low Light-Modus unterstützt wird:

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
      }
    )

Wichtige Informationen zu diesem Code

Prüfen, ob das Low Light-Modus-Modul installiert ist

Sobald Sie einen Client haben, können Sie prüfen, ob das Low Light-Modus-Modul auf Ihrem Gerät installiert ist. Mit dem folgenden Code wird geprüft, ob das Modul installiert ist:

Kotlin

// Handle the Google Play services Task API with Kotlin coroutines
// (kotlinx-coroutines-play-services)
launch {
  try {
    val isInstalled: Boolean = lowLightBoostClient
      .isModuleInstalled(context).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);
    });

Wichtige Informationen zu diesem Code

  • Mit diesem Code wird eine Kamerasitzung geöffnet, die eine Verbindung zur Kamera herstellt, die durch cameraId identifiziert wird. Weitere Informationen finden Sie in der Camera2 Dokumentation.
  • Die Methode LowLightBoostClient.isModuleInstalled() gibt ein Task Objekt zurück. Mit diesem Objekt können Sie Listener für Erfolg und Fehler einrichten.
  • Verwenden Sie Task.addOnSuccessListener(), um einen Listener einzurichten, der aufgerufen wird, wenn der Aufruf von isModuleInstalled() erfolgreich ist. Wichtig: Wenn der Listener für Erfolg aufgerufen wird, bedeutet das nur, dass der Client erfolgreich herausgefunden hat, ob das Modul auf dem Gerät installiert ist. Im Text des Listeners müssen Sie prüfen, ob das Modul tatsächlich installiert ist.
  • Wenn das Modul noch nicht installiert ist, wird es mit diesem Snippet installiert, indem die Methode launchInstallRequest() aufgerufen wird. Diese Methode ist im Snippet unter Low Light-Modus-Modul installieren definiert.

Low Light-Modus-Modul installieren

Wenn das Low Light-Modus-Modul noch nicht auf dem Gerät installiert ist, müssen Sie es von den Google Play-Diensten herunterladen und installieren. Dieser Code zeigt, wie das geht:

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

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

      try {
        val isInstallSuccessful: Boolean = lowLightBoostClient
          .installModule(context,
                        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);
      });
}

Wichtige Informationen zu diesem Code

  • Wenn Sie LowLightBoostClient.installModule() aufrufen, übergeben Sie ein Callback-Objekt, das LowLightBoostClient.InstallStatusCallbackimplementiert. Mit installModule() werden Methoden in diesem Callback aufgerufen, um den Status des Downloads anzugeben. Wenn der Download beispielsweise pausiert ist, ruft installModule() die Methode onDownloadPause() des Callback-Objekts auf.
  • In diesem Code-Snippet wird das Callback-Objekt mit der Methode createInstallStatusCallback() erstellt. Sie müssen diese Methode selbst schreiben, etwa so:

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() prüft, ob das Android-Gerät und das Betriebssystem Google Low Light-Modus unterstützen. Wenn nicht, laden Sie das Modul nicht herunter.

  • Die Methode LowLightBoostClient.installModule() gibt ein Task Objekt zurück. Mit diesem Objekt können Sie Listener für Erfolg und Fehler einrichten.

  • Wenn die Installation abgeschlossen ist, wird sie vom Listener für Erfolg durch Öffnen der Kamera überprüft. Im Snippet erfolgt dies mit einem Aufruf von openCamera(). Sie müssen diese Methode selbst schreiben.