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

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

Методы 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. Информацию о доступе к API сервисов Google Play см. в документации сервисов Google Play .

Создать клиента

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

Котлин

val lowLightBoostClient = LowLightBoost.getClient(context)

Ява

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

Ява

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 . Этот объект используется для настройки прослушивателей успешного и неудачного срабатывания. Создайте сеанс усиления при слабом освещении внутри прослушивателя успешного срабатывания.

Проверьте, установлен ли модуль усиления света при слабом освещении.

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

Котлин

// 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() . Вам нужно написать этот метод самостоятельно.