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

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

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

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

Чтобы сделать что-нибудь еще, вам понадобится клиент для повышения освещенности. Следующий код создает клиента:

Котлин

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() . Importantly, if the success listener is called, that just tells you that the client succeeded in finding out whether the module is installed on the device. В теле вашего слушателя вам необходимо проверить, действительно ли установлен модуль или нет.
  • Если модуль еще не установлен, этот фрагмент устанавливает его, вызывая метод 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 . Вы используете этот объект для настройки прослушивателей успехов и неудач. Создайте сеанс повышения при слабом освещении внутри прослушивателя успеха.
,

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

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

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

Чтобы сделать что-нибудь еще, вам понадобится клиент для повышения освещенности. Следующий код создает клиента:

Котлин

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