Чтобы использовать Google Low Light Boost, вам понадобится клиент Low Light Boost . Вы можете использовать клиент для проверки того, установлен ли модуль Low Light Boost, а также для проверки того, поддерживается ли Google Low Light Boost устройством и камерой, на которых запущено ваше приложение. Вы также будете использовать клиент для создания LowLightBoostSession
. ( Вы будете использовать сеанс для включения и выключения Low Light Boost.) Вы также можете настроить прослушиватель для получения обратных вызовов, когда Low Light Boost активен.
Методы LowLightBoostClient
не сигнализируют об успехе или неудаче напрямую. Вместо этого они возвращают объект Task
. Вы используете Task
для настройки прослушивателей успеха и неудачи. Это позволяет методам асинхронно сигнализировать об успехе или неудаче, что необходимо, поскольку методы должны взаимодействовать со службами Google Play.
Зависимости
Котлин
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")
}
Круто
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
предоставляется пакетом com.google.android.gms.cameralowlight
сервисов Google Play. Информацию о доступе к API сервисов Google Play см. в документации сервисов Google Play .
Создать клиента
Вам нужен клиент Low Light Boost, чтобы сделать что-то еще. Следующий код создает клиента:
Котлин
val lowLightBoostClient = LowLightBoost.getClient(context)
Ява
LowLightBoostClient lowLightBoostClient = LowLightBoost.getClient(context);
Ключевые моменты этого кодекса
- Класс
LowLightBoost
предоставляет статический методgetClient
, который возвращает экземплярLowLightBoostClient
.
Проверьте, установлен ли модуль усиления при слабом освещении.
После того, как у вас есть клиент, вы можете подтвердить, установлен ли на вашем устройстве модуль усиления низкой освещенности. Следующий код проверяет, установлен ли модуль:
Котлин
// 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)
}
}
Ява
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);
});
Ключевые моменты этого кодекса
- Этот код открывает сеанс камеры, подключаясь к камере, идентифицированной
cameraId
. Для получения дополнительной информации см. документацию Camera2 . - Метод
LowLightBoostClient.isModuleInstalled()
возвращает объектTask
. Этот объект используется для настройки прослушивателей успеха и неудачи. - Используйте
Task.addOnSuccessListener()
для настройки прослушивателя, который вызывается, если вызовisModuleInstalled()
успешен. Важно, что если вызывается прослушиватель успеха, это просто говорит вам, что клиент успешно выяснил, установлен ли модуль на устройстве. В теле вашего прослушивателя вам нужно проверить, установлен ли модуль на самом деле или нет. - Если модуль еще не установлен, этот фрагмент устанавливает его, вызывая метод
launchInstallRequest()
. Этот метод определен в фрагменте в Установка модуля усиления низкой освещенности .
Установите модуль усиления при слабом освещении
Если модуль усиления низкой освещенности еще не установлен на устройстве, вам нужно будет загрузить и установить его из сервисов Google Play. Этот код показывает, как это сделать:
Котлин
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)
}
}
Ява
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);
});
}
Ключевые моменты этого кодекса
- При вызове
LowLightBoostClient.installModule()
вы передаете объект обратного вызова, который реализуетLowLightBoostClient.InstallStatusCallback
.installModule()
вызывает методы в этом обратном вызове, чтобы указать статус загрузки. Например, если загрузка приостановлена,installModule()
вызывает методonDownloadPause()
объекта обратного вызова. - В этом фрагменте кода объект обратного вызова создается методом
createInstallStatusCallback()
. Вам нужно будет написать этот метод самостоятельно, примерно так:
Котлин
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...
}
Ява
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()
проверяет, поддерживает ли устройство Android и операционная система Google Low Light Boost. Если нет, не загружайте модуль.Метод
LowLightBoostClient.installModule()
возвращает объектTask
. Этот объект используется для настройки прослушивателей успеха и неудачи.Когда установка завершается, прослушиватель успешного завершения проверяет установку, открывая камеру. В этом фрагменте это делается с помощью вызова
openCamera()
. Вам нужно будет написать этот метод самостоятельно.
Проверьте, поддерживается ли усиление при слабом освещении
После того, как у вас есть клиент, вы можете проверить, поддерживается ли усиление при слабом освещении устройством, на котором запущено приложение. Следующий код проверяет, поддерживается ли усиление при слабом освещении:
Котлин
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)
}
}
Ява
lowLightBoostClient
.isCameraSupported(cameraId)
.addOnSuccessListener(
lowLightBoostExecutor,
(isSupported) -> {
Log.d(TAG, "isCameraSupported: " + isSupported);
if (isSupported) {
// Create the low light boost session here
}
)
Ключевые моменты этого кодекса
- Предполагается, что
cameraId
— это идентификатор камеры Camera2 , созданной в другом месте. -
LowLightBoostClient.isCameraSupported()
проверяет, поддерживает ли камера Camera2 усиление при слабом освещении. В некоторых случаях устройство может поддерживать усиление при слабом освещении, но одна из его камер может не поддерживать, поэтому вам нужно проверить обе. - Метод
LowLightBoostClient.isCameraSupported()
возвращает объектTask
. Этот объект используется для настройки прослушивателей успеха и неудачи. Создайте сеанс усиления низкой освещенности внутри прослушивателя успеха.