Для использования 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.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")
}
Классный
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 предоставляется пакетом com.google.android.gms.cameralowlight из библиотеки Google Play Services. Информацию о доступе к API Google Play Services см. в документации Google Play Services.
Создать клиента
Для выполнения любых других действий вам потребуется клиент с низким уровнем освещенности. Следующий код создает клиент:
Котлин
val lowLightBoostClient = LowLightBoost.getClient(context)
Java
LowLightBoostClient lowLightBoostClient = LowLightBoost.getClient(context);
Основные моменты, касающиеся этого кода
- Класс
LowLightBoostпредоставляет статический методgetClient, который возвращает экземпляр классаLowLightBoostClient.
Проверьте, поддерживается ли функция усиления низкой яркости.
После создания клиентского приложения вы можете проверить, поддерживается ли функция усиления низкой освещенности на устройстве, на котором оно запущено. Следующий код проверяет поддержку этой функции:
Котлин
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
}
)
Основные моменты, касающиеся этого кода
- Предполагается, что
cameraId— это идентификатор камеры Camera2 , созданной в другом месте. -
LowLightBoostClient.isCameraSupported()проверяет, поддерживает ли камера Camera2 функцию усиления при слабом освещении. В некоторых случаях устройство может поддерживать усиление при слабом освещении, но одна из его камер может этого не поддерживать, поэтому необходимо проверить обе функции. - Метод
LowLightBoostClient.isCameraSupported()возвращает объектTask. Этот объект используется для настройки обработчиков событий при успешном и неудачном выполнении. Создайте сессию Low Light Boost внутри обработчика успешного выполнения.
Проверьте, установлен ли модуль усиления яркости при слабом освещении.
Получив клиентское приложение, вы можете проверить, установлен ли на вашем устройстве модуль усиления яркости при слабом освещении. Следующий код проверяет, установлен ли модуль:
Котлин
// 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);
});
Основные моменты, касающиеся этого кода
- Этот код открывает сеанс работы с камерой, подключаясь к камере, идентифицированной по
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)
}
}
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);
});
}
Основные моменты, касающиеся этого кода
- При вызове метода
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...
}
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()проверяет, поддерживает ли устройство и операционная система Android функцию Google Low Light Boost. Если нет, модуль не загружается.Метод
LowLightBoostClient.installModule()возвращает объектTask. Этот объект используется для настройки обработчиков событий при успешном и неудачном выполнении.После завершения установки обработчик успешного выполнения проверяет её, открывая камеру. В приведенном фрагменте кода это делается с помощью вызова метода
openCamera(). Вам потребуется написать этот метод самостоятельно.