Aby korzystać z funkcji Google Słabe oświetlenie, musisz mieć klienta Słabe oświetlenie.
Za pomocą klienta możesz sprawdzić, czy moduł wzmocnienia przy słabym oświetleniu jest zainstalowany, oraz czy wzmocnienie przy słabym oświetleniu Google jest obsługiwane przez urządzenie i aparat, na których działa Twoja aplikacja. Za pomocą klienta utworzysz też LowLightBoostSession
.
(Sesja będzie służyć do włączania i wyłączania wzmocnienia przy słabym oświetleniu). Możesz też skonfigurować detektor, aby otrzymywać wywołania zwrotne, gdy aktywna jest funkcja wzmocnienia przy słabym oświetleniu.
LowLightBoostClient
nie sygnalizują bezpośrednio powodzenia lub niepowodzenia. Zamiast tego zwracają obiekt Task
. Do skonfigurowania odbiorników sukcesu i niepowodzenia 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.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
jest udostępniana 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 zrobić coś więcej, potrzebujesz klienta wzmocnienia przy słabym oświetleniu. 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ęLowLightBoostClient
.
Sprawdzanie, czy funkcja wzmocnienia przy słabym oświetleniu jest obsługiwana
Gdy masz już klienta, możesz sprawdzić, czy funkcja wzmocnienia przy słabym oświetleniu jest obsługiwana przez urządzenie, na którym działa aplikacja. Poniższy kod sprawdza, czy funkcja wzmocnienia przy słabym oświetleniu 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
- Zakłada się, że
cameraId
to identyfikator kamery Camera2 utworzonej w innym miejscu. LowLightBoostClient.isCameraSupported()
sprawdza, czy aparat Camera2 obsługuje wzmocnienie przy słabym oświetleniu. W niektórych przypadkach urządzenie może obsługiwać funkcję wzmocnienia przy słabym oświetleniu, ale jedna z jego kamer może jej nie obsługiwać, więc musisz sprawdzić obie.- Metoda
LowLightBoostClient.isCameraSupported()
zwraca obiektTask
. Używasz tego obiektu do konfigurowania odbiorników sukcesu i niepowodzenia. Utwórz sesję wzmocnienia przy słabym oświetleniu w ramach odbiornika sukcesu.
Sprawdzanie, czy moduł wzmocnienia przy słabym oświetleniu jest zainstalowany
Gdy będziesz mieć klienta, możesz sprawdzić, czy na Twoim urządzeniu jest zainstalowany moduł wzmocnienia 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, która łączy się z kamerą zidentyfikowaną przez
cameraId
. Więcej informacji znajdziesz w dokumentacji Camera2. - Metoda
LowLightBoostClient.isModuleInstalled()
zwraca obiektTask
. Używasz tego obiektu do konfigurowania odbiorników sukcesu i niepowodzenia. - Użyj
Task.addOnSuccessListener()
, aby skonfigurować odbiornik, który jest wywoływany, jeśli wywołanieisModuleInstalled()
zakończy się powodzeniem. Ważne jest to, że jeśli zostanie wywołany odbiornik sukcesu, oznacza to tylko, że klientowi udało się ustalić, czy moduł jest zainstalowany na urządzeniu. W treści odbiornika musisz sprawdzić, czy moduł jest zainstalowany. - Jeśli moduł nie jest jeszcze zainstalowany, ten fragment kodu zainstaluje go, wywołując metodę
launchInstallRequest()
. Ta metoda jest zdefiniowana we fragmencie kodu w sekcji Instalowanie modułu wzmocnienia przy słabym oświetleniu.
Instalowanie modułu słabego oświetlenia
Jeśli moduł wzmocnienia 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 funkcję
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ła metodęonDownloadPause()
obiektu wywołania zwrotnego. - W tym fragmencie kodu obiekt wywołania zwrotnego jest tworzony przez metodę
createInstallStatusCallback()
. Musisz samodzielnie napisać tę metodę, np. 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
. Używasz tego obiektu do konfigurowania odbiorników sukcesu i niepowodzenia.Po zakończeniu instalacji odbiornik sukcesu weryfikuje instalację, otwierając kamerę. W krótkim opisie odbywa się to za pomocą wywołania
openCamera()
. Musisz samodzielnie napisać tę metodę.