Tworzenie i używanie klienta do wzmocnienia w warunkach słabego oświetlenia

Aby korzystać z Google Low Light Boost, musisz mieć klienta low light boost. Za pomocą klienta możesz sprawdzić, czy moduł wzmocnienia w słabych warunkach oświetleniowych jest zainstalowany, oraz czy urządzenie i kamera, na którym działa Twoja aplikacja, obsługują funkcję wzmocnienia w słabych warunkach oświetleniowych Google. Klienta użyjesz też do utworzenia LowLightBoostSession. (użyjesz sesji do włączania i wyłączania wzmocnienia w warunkach słabego oświetlenia). Możesz też skonfigurować listenera, aby otrzymywał wywołania zwrotne, gdy aktywny jest tryb Boost w warunkach słabego oświetlenia.

LowLightBoostClient nie sygnalizują bezpośrednio powodzenia ani niepowodzenia. Zamiast tego zwracają obiekt Task. Do konfigurowania słuchaczy sukcesu i braku sukcesu używasz Task. Dzięki temu metody mogą asynchronicznie sygnalizować powodzenie lub niepowodzenie, co jest konieczne, ponieważ muszą one komunikować się z usługami Google Play.

Zależności

Kotlin

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

Groovy

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 jest udostępniany w ramach pakietu com.google.android.gms.cameralowlight Usługi Google Play. Więcej informacji o dostępie do interfejsów API Usług Google Play znajdziesz w dokumentacji Usług Google Play.

Tworzenie klienta

Aby wykonać inne czynności, musisz mieć klienta do obsługi trybu niskiego oświetlenia. Ten kod tworzy klienta:

Kotlin

val lowLightBoostClient = LowLightBoost.getClient(context)

Java

LowLightBoostClient lowLightBoostClient = LowLightBoost.getClient(context);

Najważniejsze informacje o tym kodzie

  • Klasa LowLightBoost udostępnia metodę statyczną getClient, która zwraca instancję klasy LowLightBoostClient.

Sprawdź, czy moduł wzmocnienia w warunkach słabego oświetlenia jest zainstalowany

Gdy masz już klienta, możesz sprawdzić, czy na urządzeniu jest zainstalowany moduł wzmocnienia w przyciemnionym pomieszczeniu. Poniższy kod sprawdza, czy moduł jest zainstalowany:

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

Najważniejsze informacje o tym kodzie

  • Ten kod otwiera sesję aparatu, łącząc się z kamerą oznaczoną jako cameraId. Więcej informacji znajdziesz w dokumentacji Camera2.
  • Metoda LowLightBoostClient.isModuleInstalled()zwraca obiekt Task. Używasz tego obiektu do konfigurowania odbiorników sukcesu i błędu.
  • Użyj funkcji Task.addOnSuccessListener(), aby skonfigurować odbiornik, który zostanie wywołany, jeśli wywołanie funkcji isModuleInstalled() zakończy się powodzeniem. Ważne: jeśli wywołany zostanie odbiorca sukcesu, oznacza to, że klientowi udało się ustalić, czy moduł jest zainstalowany na urządzeniu. W ciele listenera musisz sprawdzić, czy moduł jest rzeczywiście zainstalowany.
  • Jeśli moduł nie jest jeszcze zainstalowany, ten fragment kodu instaluje go przez wywołanie metody launchInstallRequest(). Ta metoda jest zdefiniowana w fragmentach kodu w module Instalowanie wzmocnienia w trybie słabego oświetlenia.

Instalowanie modułu wzmocnienia słabego oświetlenia

Jeśli moduł wzmocnienia w warunkach słabego oświetlenia nie jest jeszcze zainstalowany na urządzeniu, musisz go pobrać i zainstalować z Usług Google Play. Ten kod pokazuje, jak to zrobić:

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

Najważniejsze informacje o tym kodzie

  • Gdy wywołujesz funkcję LowLightBoostClient.installModule(), przekazujesz obiekt wywołania zwrotnego, który implementuje funkcję LowLightBoostClient.InstallStatusCallback. installModule() wywołuje metody w tym wywołaniu zwrotnym, aby wskazać stan pobierania. Jeśli na przykład pobieranie jest wstrzymane, installModule() wywołuje metodę onDownloadPause() obiektu callback.
  • W tym fragmencie kodu obiekt wywołania zwrotnego jest tworzony przez metodę createInstallStatusCallback(). Musisz napisać tę metodę samodzielnie:

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()sprawdza, czy urządzenie z Androidem i system operacyjny obsługują funkcję Google Boost w słabych warunkach oświetleniowych. Jeśli nie, nie pobieraj modułu.

  • Metoda LowLightBoostClient.installModule()zwraca obiekt Task. Używasz tego obiektu do konfigurowania odbiorników sukcesu i błędu.

  • Po zakończeniu instalacji listener powodzenia weryfikuje instalację, otwierając kamerę. W kodzie skryptu jest to realizowane przez wywołanie funkcji openCamera(). Musisz ją napisać samodzielnie.

Sprawdzanie, czy tryb wzmocnienia przy słabym oświetleniu jest obsługiwany

Gdy masz już klienta, możesz sprawdzić, czy urządzenie, na którym działa aplikacja, obsługuje tryb Boost w słabych warunkach oświetleniowych. Poniższy kod sprawdza, czy tryb wzmocnienia przy słabym oświetleniu jest obsługiwany:

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

Najważniejsze informacje o tym kodzie