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

Aby korzystać z funkcji Google Słabe oświetlenie, musisz mieć klienta Słabe oświetlenie. Za pomocą klienta możesz sprawdzić, czy moduł wzmocnienia przy słabym oświetleniu jest zainstalowany, oraz czy wzmocnienie przy słabym oświetleniu Google jest obsługiwane przez urządzenie i aparat, na których działa Twoja aplikacja. Za pomocą klienta utworzysz też LowLightBoostSession. (Sesja będzie służyć do włączania i wyłączania wzmocnienia przy słabym oświetleniu). Możesz też skonfigurować detektor, aby otrzymywać wywołania zwrotne, gdy aktywna jest funkcja wzmocnienia przy słabym oświetleniu.

LowLightBoostClient nie sygnalizują bezpośrednio powodzenia lub niepowodzenia. Zamiast tego zwracają obiekt Task. Do skonfigurowania odbiorników sukcesu i niepowodzenia 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.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")
}

Groovy

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 jest udostępniana przez pakiet Usług Google Play com.google.android.gms.cameralowlight. Informacje o uzyskiwaniu dostępu do interfejsów API Usług Google Play znajdziesz w dokumentacji Usług Google Play.

Tworzenie klienta

Aby zrobić coś więcej, potrzebujesz klienta wzmocnienia przy słabym oświetleniu. Ten kod tworzy klienta:

Kotlin

val lowLightBoostClient = LowLightBoost.getClient(context)

Java

LowLightBoostClient lowLightBoostClient = LowLightBoost.getClient(context);

Najważniejsze informacje o tym kodzie

Sprawdzanie, czy funkcja wzmocnienia przy słabym oświetleniu jest obsługiwana

Gdy masz już klienta, możesz sprawdzić, czy funkcja wzmocnienia przy słabym oświetleniu jest obsługiwana przez urządzenie, na którym działa aplikacja. Poniższy kod sprawdza, czy funkcja wzmocnienia przy słabym oświetleniu jest obsługiwana:

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

  • Zakłada się, że cameraId to identyfikator kamery Camera2 utworzonej w innym miejscu.
  • LowLightBoostClient.isCameraSupported() sprawdza, czy aparat Camera2 obsługuje wzmocnienie przy słabym oświetleniu. W niektórych przypadkach urządzenie może obsługiwać funkcję wzmocnienia przy słabym oświetleniu, ale jedna z jego kamer może jej nie obsługiwać, więc musisz sprawdzić obie.
  • Metoda LowLightBoostClient.isCameraSupported() zwraca obiekt Task. Używasz tego obiektu do konfigurowania odbiorników sukcesu i niepowodzenia. Utwórz sesję wzmocnienia przy słabym oświetleniu w ramach odbiornika sukcesu.

Sprawdzanie, czy moduł wzmocnienia przy słabym oświetleniu jest zainstalowany

Gdy będziesz mieć klienta, możesz sprawdzić, czy na Twoim urządzeniu jest zainstalowany moduł wzmocnienia przy słabym oświetleniu. 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ę kamery, która łączy się z kamerą zidentyfikowaną przez cameraId. Więcej informacji znajdziesz w dokumentacji Camera2.
  • Metoda LowLightBoostClient.isModuleInstalled() zwraca obiekt Task. Używasz tego obiektu do konfigurowania odbiorników sukcesu i niepowodzenia.
  • Użyj Task.addOnSuccessListener(), aby skonfigurować odbiornik, który jest wywoływany, jeśli wywołanie isModuleInstalled() zakończy się powodzeniem. Ważne jest to, że jeśli zostanie wywołany odbiornik sukcesu, oznacza to tylko, że klientowi udało się ustalić, czy moduł jest zainstalowany na urządzeniu. W treści odbiornika musisz sprawdzić, czy moduł jest zainstalowany.
  • Jeśli moduł nie jest jeszcze zainstalowany, ten fragment kodu zainstaluje go, wywołując metodę launchInstallRequest(). Ta metoda jest zdefiniowana we fragmencie kodu w sekcji Instalowanie modułu wzmocnienia przy słabym oświetleniu.

Instalowanie modułu słabego oświetlenia

Jeśli moduł wzmocnienia przy słabym oświetleniu 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 interfejs LowLightBoostClient.InstallStatusCallback. installModule() wywołuje metody w tym wywołaniu zwrotnym, aby wskazać stan pobierania. Jeśli na przykład pobieranie zostanie wstrzymane, installModule() wywoła metodę onDownloadPause() obiektu wywołania zwrotnego.
  • W tym fragmencie kodu obiekt wywołania zwrotnego jest tworzony przez metodę createInstallStatusCallback(). Musisz samodzielnie napisać tę metodę, np. w ten sposób:

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 Low Light Boost. Jeśli nie, nie pobieraj modułu.

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

  • Po zakończeniu instalacji odbiornik sukcesu weryfikuje instalację, otwierając kamerę. W krótkim opisie odbywa się to za pomocą wywołania openCamera(). Musisz samodzielnie napisać tę metodę.