Aby korzystać z automatycznej ekspozycji w trybie słabego oświetlenia, musisz mieć klienta automatycznej ekspozycji w trybie słabego oświetlenia.
Za pomocą klienta możesz sprawdzić, czy moduł wzmocnienia obrazu przy słabym oświetleniu jest zainstalowany oraz czy urządzenie i aparat, na których działa aplikacja, obsługują wzmocnienie obrazu przy słabym oświetleniu od Google. Użyjesz też klienta do utworzenia LowLightBoostSession.
(Użyjesz sesji, aby włączyć i wyłączyć ulepszoną ekspozycję przy słabym oświetleniu). Możesz też skonfigurować detektor, aby otrzymywać wywołania zwrotne, gdy aktywne jest wzmocnienie przy słabym oświetleniu.
Metody LowLightBoostClient nie sygnalizują bezpośrednio sukcesu ani niepowodzenia. Zamiast tego zwracają obiekt Task. Do skonfigurowania detektorów sukcesu i niepowodzenia używasz obiektu Task. Dzięki temu metody mogą asynchronicznie sygnalizować powodzenie lub niepowodzenie, co jest konieczne, ponieważ metody muszą komunikować się z usługami Google Play.
Zależności
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")
}
Dynamiczny
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 jest dostarczany przez pakiet Usług Google Play com.google.android.gms.cameralowlight. Informacje o uzyskiwaniu dostępu 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 ulepszenia obrazu przy słabym oświetleniu. Poniższy kod tworzy klienta:
Kotlin
val lowLightBoostClient = LowLightBoost.getClient(context)
Java
LowLightBoostClient lowLightBoostClient = LowLightBoost.getClient(context);
Najważniejsze informacje o tym kodzie
- Klasa
LowLightBoostudostępnia metodę statycznągetClient, która zwraca instancjęLowLightBoostClient.
Sprawdzanie, czy funkcja słabego oświetlenia jest obsługiwana
Gdy masz klienta, możesz sprawdzić, czy urządzenie, na którym działa aplikacja, obsługuje wzmocnienie obrazu przy słabym oświetleniu. Poniższy kod sprawdza, czy funkcja wzmocnienia słabego oświetlenia jest obsługiwana:
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
cameraIdjest traktowany jako identyfikator kamery Camera2 utworzonej w innym miejscu.LowLightBoostClient.isCameraSupported()sprawdza, czy aparat Camera2 obsługuje wzmocnienie obrazu przy słabym oświetleniu. W niektórych przypadkach urządzenie może obsługiwać wzmocnienie obrazu przy słabym oświetleniu, ale jeden z jego aparatów może nie mieć tej funkcji, dlatego musisz sprawdzić oba.- Metoda
LowLightBoostClient.isCameraSupported()zwraca obiektTask. Za pomocą tego obiektu możesz skonfigurować detektory sukcesu i niepowodzenia. Utwórz sesję ulepszania obrazu przy słabym oświetleniu w detektorze sukcesu.
Sprawdzanie, czy moduł wzmocnienia obrazu przy słabym oświetleniu jest zainstalowany
Gdy masz klienta, możesz sprawdzić, czy na urządzeniu jest zainstalowany moduł wzmocnienia obrazu przy słabym oświetleniu. 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ę kamery, łącząc się z kamerą o identyfikatorze
cameraId. Więcej informacji znajdziesz w dokumentacji Camera2. - Metoda
LowLightBoostClient.isModuleInstalled()zwraca obiektTask. Za pomocą tego obiektu możesz skonfigurować detektory sukcesu i niepowodzenia. - Użyj metody
Task.addOnSuccessListener(), aby skonfigurować detektor, który jest wywoływany, gdy wywołanie metodyisModuleInstalled()się powiedzie. Co ważne, wywołanie detektora sukcesu oznacza tylko, że klientowi udało się ustalić, czy moduł jest zainstalowany na urządzeniu. W treści detektora musisz sprawdzić, czy moduł jest zainstalowany. - Jeśli moduł nie jest jeszcze zainstalowany, ten fragment kodu instaluje go, wywołując metodę
launchInstallRequest(). Ta metoda jest zdefiniowana we fragmencie kodu w sekcji Instalowanie modułu wzmocnienia obrazu przy słabym oświetleniu.
Instalowanie modułu ulepszania obrazu przy słabym oświetleniu
Jeśli moduł ulepszania obrazu przy słabym oświetleniu 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 metodę
LowLightBoostClient.installModule(), przekazujesz obiekt wywołania zwrotnego, który implementuje interfejsLowLightBoostClient.InstallStatusCallback.installModule()wywołuje metody w tym wywołaniu zwrotnym, aby wskazać stan pobierania. Jeśli na przykład pobieranie zostanie wstrzymane,installModule()wywołuje metodęonDownloadPause()obiektu wywołania zwrotnego. - W tym fragmencie kodu obiekt wywołania zwrotnego jest tworzony przez metodę
createInstallStatusCallback(). Musisz samodzielnie napisać tę metodę, na przykład w ten sposób:
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 Low Light Boost. Jeśli nie, nie pobieraj modułu.Metoda
LowLightBoostClient.installModule()zwraca obiektTask. Za pomocą tego obiektu możesz skonfigurować detektory sukcesu i niepowodzenia.Po zakończeniu instalacji detektor powodzenia weryfikuje instalację, otwierając aparat. We fragmencie kodu odbywa się to przez wywołanie
openCamera(). Musisz samodzielnie napisać tę metodę.