Wenn du Google Low Light-Modus verwenden möchtest, benötigst du einen Low Light-Modus-Client.
Mit dem Client kannst du 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 denen deine App ausgeführt wird. Außerdem verwendest du den Client, um eine LowLightBoostSession zu erstellen.
(Mit der Sitzung) kannst du den Low Light-Modus aktivieren und deaktivieren. Du kannst auch einen Listener einrichten, um Callbacks zu erhalten, wenn der Low Light-Modus aktiv ist.
Die Methoden von LowLightBoostClient geben nicht direkt an, ob ein Vorgang erfolgreich war oder nicht. Stattdessen
geben sie ein Task-Objekt zurück. Mit einem Task kannst du Listener für Erfolge und Fehler einrichten. So können die Methoden asynchron angeben, ob ein Vorgang erfolgreich war oder nicht. 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 findest du in der Dokumentation zu den Google Play-Diensten.
Client erstellen
Für alle anderen Vorgänge benötigst du 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
LowLightBoostKlasse bietet die statische MethodegetClient, die eine Instanz vonLowLightBoostClientzurückgibt.
Prüfen, ob der Low Light-Modus unterstützt wird
Sobald du einen Client hast, kannst du 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
cameraIdist die ID einer Camera2 Kamera, die an anderer Stelle erstellt wurde.LowLightBoostClient.isCameraSupported()prüft, ob die Camera2-Kamera den Low Light-Modus unterstützt. In einigen Fällen unterstützt ein Gerät den Low Light-Modus, aber eine seiner Kameras nicht. Daher musst du beides prüfen.- Die Methode
LowLightBoostClient.isCameraSupported()gibt einTaskObjekt zurück. Mit diesem Objekt kannst du Listener für Erfolge und Fehler einrichten. Erstelle die Low Light-Modus-Sitzung im Listener für Erfolge.
Prüfen, ob das Low Light-Modus-Modul installiert ist
Sobald du einen Client hast, kannst du prüfen, ob das Low Light-Modus-Modul auf deinem 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
cameraIdidentifiziert wird. Weitere Informationen findest du in der Camera2 Dokumentation. - Die Methode
LowLightBoostClient.isModuleInstalled()gibt einTaskObjekt zurück. Mit diesem Objekt kannst du Listener für Erfolge und Fehler einrichten. - Mit
Task.addOnSuccessListener()kannst du einen Listener einrichten, der aufgerufen wird, wenn der Aufruf vonisModuleInstalled()erfolgreich ist. Wenn der Listener für Erfolge aufgerufen wird, bedeutet das nur, dass der Client erfolgreich herausgefunden hat, ob das Modul auf dem Gerät installiert ist. Im Text des Listeners musst du 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, musst du 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 du
LowLightBoostClient.installModule()aufrufst, übergibst du ein Callback-Objekt, dasLowLightBoostClient.InstallStatusCallbackimplementiert. MitinstallModule()werden Methoden in diesem Callback aufgerufen, um den Status des Downloads anzugeben. Wenn der Download beispielsweise pausiert wird, ruftinstallModule()die MethodeonDownloadPause()des Callback-Objekts auf. - In diesem Code-Snippet wird das Callback-Objekt mit der Methode
createInstallStatusCallback()erstellt. Du musst 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, lade das Modul nicht herunter.Die Methode
LowLightBoostClient.installModule()gibt einTaskObjekt zurück. Mit diesem Objekt kannst du Listener für Erfolge und Fehler einrichten.Wenn die Installation abgeschlossen ist, wird sie vom Listener für Erfolge durch Öffnen der Kamera überprüft. Im Snippet erfolgt dies mit einem Aufruf von
openCamera(). Du musst diese Methode selbst schreiben.