Aby korzystać z Google Low Light Boost, musisz mieć klienta low light boost.
Za pomocą klienta możesz sprawdzić, czy moduł wzmocnienia w słabych warunkach oświetleniowych jest zainstalowany, oraz czy urządzenie i kamera, na którym działa Twoja aplikacja, obsługują funkcję wzmocnienia w słabych warunkach oświetleniowych Google. Klienta użyjesz też do utworzenia LowLightBoostSession
.
(użyjesz sesji do włączania i wyłączania wzmocnienia w warunkach słabego oświetlenia). Możesz też skonfigurować listenera, aby otrzymywał wywołania zwrotne, gdy aktywny jest tryb Boost w warunkach słabego oświetlenia.
LowLightBoostClient
nie sygnalizują bezpośrednio powodzenia ani niepowodzenia. Zamiast tego zwracają obiekt Task
. Do konfigurowania słuchaczy sukcesu i braku sukcesu używasz Task
. Dzięki temu metody mogą asynchronicznie sygnalizować powodzenie lub niepowodzenie, co jest konieczne, ponieważ muszą one komunikować się z usługami Google Play.
Zależności
Kotlin
dependencies {
val low_light_boost_version = "16.0.0-beta01"
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.0-beta01"
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
jest udostępniany w ramach pakietu com.google.android.gms.cameralowlight
Usługi Google Play. Więcej informacji o dostępie do interfejsów API Usług Google Play znajdziesz w dokumentacji Usług Google Play.
Tworzenie klienta
Aby wykonać inne czynności, musisz mieć klienta do obsługi trybu niskiego oświetlenia. Ten kod tworzy klienta:
Kotlin
val lowLightBoostClient = LowLightBoost.getClient(context)
Java
LowLightBoostClient lowLightBoostClient = LowLightBoost.getClient(context);
Najważniejsze informacje o tym kodzie
- Klasa
LowLightBoost
udostępnia metodę statycznągetClient
, która zwraca instancję klasyLowLightBoostClient
.
Sprawdź, czy moduł wzmocnienia w warunkach słabego oświetlenia jest zainstalowany
Gdy masz już klienta, możesz sprawdzić, czy na urządzeniu jest zainstalowany moduł wzmocnienia w przyciemnionym pomieszczeniu. Poniższy kod sprawdza, czy moduł jest zainstalowany:
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);
});
Najważniejsze informacje o tym kodzie
- Ten kod otwiera sesję aparatu, łącząc się z kamerą oznaczoną jako
cameraId
. Więcej informacji znajdziesz w dokumentacji Camera2. - Metoda
LowLightBoostClient.isModuleInstalled()
zwraca obiektTask
. Używasz tego obiektu do konfigurowania odbiorników sukcesu i błędu. - Użyj funkcji
Task.addOnSuccessListener()
, aby skonfigurować odbiornik, który zostanie wywołany, jeśli wywołanie funkcjiisModuleInstalled()
zakończy się powodzeniem. Ważne: jeśli wywołany zostanie odbiorca sukcesu, oznacza to, że klientowi udało się ustalić, czy moduł jest zainstalowany na urządzeniu. W ciele listenera musisz sprawdzić, czy moduł jest rzeczywiście zainstalowany. - Jeśli moduł nie jest jeszcze zainstalowany, ten fragment kodu instaluje go przez wywołanie metody
launchInstallRequest()
. Ta metoda jest zdefiniowana w fragmentach kodu w module Instalowanie wzmocnienia w trybie słabego oświetlenia.
Instalowanie modułu wzmocnienia słabego oświetlenia
Jeśli moduł wzmocnienia w warunkach słabego oświetlenia nie jest jeszcze zainstalowany na urządzeniu, musisz go pobrać i zainstalować z Usług Google Play. Ten kod pokazuje, jak to zrobić:
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);
});
}
Najważniejsze informacje o tym kodzie
- Gdy wywołujesz funkcję
LowLightBoostClient.installModule()
, przekazujesz obiekt wywołania zwrotnego, który implementuje funkcjęLowLightBoostClient.InstallStatusCallback
.installModule()
wywołuje metody w tym wywołaniu zwrotnym, aby wskazać stan pobierania. Jeśli na przykład pobieranie jest wstrzymane,installModule()
wywołuje metodęonDownloadPause()
obiektu callback. - W tym fragmencie kodu obiekt wywołania zwrotnego jest tworzony przez metodę
createInstallStatusCallback()
. Musisz napisać tę metodę samodzielnie:
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()
sprawdza, czy urządzenie z Androidem i system operacyjny obsługują funkcję Google Boost w słabych warunkach oświetleniowych. Jeśli nie, nie pobieraj modułu.Metoda
LowLightBoostClient.installModule()
zwraca obiektTask
. Używasz tego obiektu do konfigurowania odbiorników sukcesu i błędu.Po zakończeniu instalacji listener powodzenia weryfikuje instalację, otwierając kamerę. W kodzie skryptu jest to realizowane przez wywołanie funkcji
openCamera()
. Musisz ją napisać samodzielnie.
Sprawdzanie, czy tryb wzmocnienia przy słabym oświetleniu jest obsługiwany
Gdy masz już klienta, możesz sprawdzić, czy urządzenie, na którym działa aplikacja, obsługuje tryb Boost w słabych warunkach oświetleniowych. Poniższy kod sprawdza, czy tryb wzmocnienia przy słabym oświetleniu jest obsługiwany:
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
}
)
Najważniejsze informacje o tym kodzie
cameraId
jest identyfikatorem kamery Camera2 utworzonej gdzie indziej.LowLightBoostClient.isCameraSupported()
sprawdza, czy aparat Camera2 obsługuje wzmocnienie w warunkach słabego oświetlenia. W niektórych przypadkach urządzenie może obsługiwać wzmocnienie w warunkach słabego oświetlenia, ale jedna z kamer może tego nie robić. Musisz więc sprawdzić oba te elementy.- Metoda
LowLightBoostClient.isCameraSupported()
zwraca obiektTask
. Używasz tego obiektu do konfigurowania odbiorników sukcesu i błędu. Utwórz sesję wzmocnienia w słabych warunkach oświetleniowych w ramach odbiornika sukcesu.