Wenn Sie den Modus für wenig Licht von Google verwenden möchten, benötigen Sie einen Client für den Modus für wenig Licht.
Mit dem Client können Sie prüfen, ob das Modul „Low Light Boost“ installiert ist und ob Google Low Light Boost vom Gerät und der Kamera unterstützt wird, auf denen Ihre App ausgeführt wird. Sie verwenden den Client auch, um eine LowLightBoostSession
zu erstellen.
Über die Sitzung kannst du die Funktion „Bei wenig Licht verstärken“ aktivieren und deaktivieren. Sie können auch einen Listener einrichten, um Rückrufe zu erhalten, wenn die Funktion „Low-Light-Boost“ aktiv ist.
LowLightBoostClient
-Methoden signalisieren Erfolg oder Fehler nicht direkt. Stattdessen wird ein Task
-Objekt zurückgegeben. Sie verwenden ein Task
, um Listener für Erfolg und Fehler einzurichten. So können die Methoden Erfolg oder Fehler asynchron signalisieren, was erforderlich ist, da die Methoden mit 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 alles Weitere benötigen Sie einen Client mit Low-Light-Boost. Mit dem folgenden Code wird ein Client erstellt:
Kotlin
val lowLightBoostClient = LowLightBoost.getClient(context)
Java
LowLightBoostClient lowLightBoostClient = LowLightBoost.getClient(context);
Wichtige Punkte zu diesem Code
- Die Klasse
LowLightBoost
stellt die statische MethodegetClient
bereit, die eine Instanz vonLowLightBoostClient
zurückgibt.
Prüfen, ob der Modus bei wenig Licht (Low Light Boost) unterstützt wird
Sobald Sie einen Client haben, können Sie prüfen, ob die Funktion „Low Light Boost“ vom Gerät unterstützt wird, auf dem die App ausgeführt wird. Mit dem folgenden Code wird geprüft, ob die Funktion „Low Light Boost“ 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 Punkte zu diesem Code
cameraId
wird als ID einer Camera2-Kamera angenommen, die an anderer Stelle erstellt wurde.LowLightBoostClient.isCameraSupported()
prüft, ob die Camera2-Kamera die Funktion „Low Light Boost“ unterstützt. In einigen Fällen unterstützt ein Gerät möglicherweise die Funktion „Low Light Boost“, eine der Kameras jedoch nicht. Sie müssen also beides prüfen.- Die Methode
LowLightBoostClient.isCameraSupported()
gibt einTask
-Objekt zurück. Mit diesem Objekt richten Sie Listener für Erfolg und Fehler ein. Erstelle die Sitzung für den Modus für wenig Licht im Success-Listener.
Prüfen, ob das Modul „Low Light Boost“ installiert ist
Wenn Sie einen Client haben, können Sie prüfen, ob das Modul „Low Light Boost“ 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 Punkte zu diesem Code
- Mit diesem Code wird eine Kamerasitzung geöffnet, die eine Verbindung zur Kamera mit der ID
cameraId
herstellt. Weitere Informationen finden Sie in der Camera2-Dokumentation. - Die Methode
LowLightBoostClient.isModuleInstalled()
gibt einTask
-Objekt zurück. Mit diesem Objekt richten Sie Listener für Erfolg und Fehler ein. - Verwende
Task.addOnSuccessListener()
, um einen Listener einzurichten, der aufgerufen wird, wenn der Aufruf vonisModuleInstalled()
erfolgreich ist. Wichtig: Wenn der Erfolgs-Listener aufgerufen wird, bedeutet das nur, dass der Client 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 durch diesen Snippet mit dem Aufruf der Methode
launchInstallRequest()
installiert. Diese Methode ist im Snippet unter Modul für die Funktion „Bessere Fotos bei wenig Licht“ installieren definiert.
Modul für wenig Licht an installieren
Wenn das Modul für die Verbesserung bei wenig Licht noch nicht auf dem Gerät installiert ist, müssen Sie es über die Google Play-Dienste 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 Punkte zu diesem Code
- Wenn Sie
LowLightBoostClient.installModule()
aufrufen, übergeben Sie ein Callback-Objekt, dasLowLightBoostClient.InstallStatusCallback
implementiert.installModule()
ruft Methoden in diesem Callback auf, 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. 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 Boost unterstützen. Wenn nicht, laden Sie das Modul nicht herunter.Die Methode
LowLightBoostClient.installModule()
gibt einTask
-Objekt zurück. Mit diesem Objekt richten Sie Listener für Erfolg und Fehler ein.Wenn die Installation abgeschlossen ist, wird sie durch Öffnen der Kamera vom Success-Listener überprüft. Im Snippet erfolgt dies mit einem Aufruf von
openCamera()
. Sie müssen diese Methode selbst schreiben.