Как создать и использовать клиент для усиления при слабом освещении

Чтобы использовать Google Low Light Boost, вам понадобится клиент для усиления при слабом освещении. С помощью клиента можно проверить, установлен ли модуль усиления при слабом освещении и поддерживается ли Google Low Light Boost устройством и камерой, на которых запущено приложение. Клиент также используется для создания LowLightBoostSession. Вы будете использовать сеанс, чтобы включать и отключать усиление слабого освещения. Вы также можете настроить слушатель, чтобы получать обратные вызовы, когда усиление при слабом освещении активно.

Методы LowLightBoostClient не сообщают напрямую об успехе или неудаче. Вместо этого они возвращают объект Task. Для настройки прослушивателей успешного и неуспешного выполнения используется Task. Это позволяет методам асинхронно сигнализировать об успехе или неудаче, что необходимо, поскольку методам нужно взаимодействовать с сервисами Google Play.

Связанные запросы

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")
}

Яркий

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 предоставляется пакетом сервисов Google Play com.google.android.gms.cameralowlight. Информацию о том, как получить доступ к API сервисов Google Play, можно найти в документации по сервисам Google Play.

Как создать клиента

Чтобы сделать что-то ещё, вам нужен клиент для усиления слабого освещения. Клиент создается с помощью следующего кода:

Kotlin

val lowLightBoostClient = LowLightBoost.getClient(context)

Java

LowLightBoostClient lowLightBoostClient = LowLightBoost.getClient(context);

Важная информация об этом коде

  • Класс LowLightBoost предоставляет статический метод getClient, который возвращает экземпляр LowLightBoostClient.

Как проверить, поддерживается ли усиление при слабом освещении

После этого вы можете проверить, поддерживается ли усиление при слабом освещении на устройстве, на котором запущено приложение. Следующий код проверяет, поддерживается ли усиление при слабом освещении:

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
      }
    )

Важная информация об этом коде

  • Предполагается, что cameraId – это идентификатор камеры Camera2, созданной в другом месте.
  • LowLightBoostClient.isCameraSupported() Проверяет, поддерживает ли камера Camera2 усиление при слабом освещении. В некоторых случаях устройство может поддерживать усиление при слабом освещении, а одна из его камер – нет, поэтому вам необходимо проверить оба.
  • Метод LowLightBoostClient.isCameraSupported() возвращает объект Task. Этот объект используется для настройки прослушивателей успешного и неудачного выполнения. Создайте сеанс усиления при слабом освещении в прослушивателе успешного выполнения.

Как проверить, установлен ли модуль улучшения видео при слабом освещении

После этого вы сможете проверить, установлен ли на вашем устройстве модуль усиления при слабом освещении. Следующий код проверяет, установлен ли модуль:

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);
    });

Важная информация об этом коде

  • Этот код открывает сеанс камеры, подключаясь к камере, идентифицированной по cameraId. Подробную информацию можно найти в документации по Camera2.
  • Метод LowLightBoostClient.isModuleInstalled() возвращает объект Task. Этот объект используется для настройки прослушивателей успешного и неудачного выполнения.
  • Используйте Task.addOnSuccessListener(), чтобы настроить прослушиватель, который вызывается, если вызов isModuleInstalled() выполнен успешно. Важно, что если вызывается прослушиватель успешного выполнения, это означает лишь то, что клиент успешно определил, установлен ли модуль на устройстве. В теле слушателя нужно проверить, установлен ли модуль.
  • Если модуль ещё не установлен, этот фрагмент кода устанавливает его, вызывая метод launchInstallRequest(). Этот метод определен во фрагменте кода в разделе Установка модуля Low Light Boost.

Как установить модуль усиления при слабом освещении

Если модуль улучшения при слабом освещении ещё не установлен на устройстве, скачайте и установите его из сервисов Google Play. Вот как это сделать:

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);
      });
}

Важная информация об этом коде

  • При вызове LowLightBoostClient.installModule() вы передаете объект обратного вызова, который реализует LowLightBoostClient.InstallStatusCallback. installModule() вызывает методы в этом обратном вызове, чтобы указать статус скачивания. Например, если скачивание приостановлено, installModule() вызывает метод onDownloadPause() объекта обратного вызова.
  • В этом фрагменте кода объект обратного вызова создается методом createInstallStatusCallback(). Вам нужно будет написать этот метод самостоятельно, примерно так:

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() проверяет, поддерживают ли устройство Android и операционная система функцию Google Low Light Boost. Если нет, не скачивайте модуль.

  • Метод LowLightBoostClient.installModule() возвращает объект Task. Этот объект используется для настройки прослушивателей успешного и неудачного выполнения.

  • Когда установка завершится, слушатель успешного выполнения проверит ее, открыв камеру. В приведенном ниже фрагменте кода это делается с помощью вызова openCamera(). Вам нужно будет написать этот метод самостоятельно.