Membuat dan menggunakan klien pengoptimalan cahaya redup

Untuk menggunakan Google Low Light Boost, Anda memerlukan klien low light boost. Anda dapat menggunakan klien untuk memeriksa apakah modul low light boost diinstal, dan untuk memeriksa apakah Google Low Light Boost didukung oleh perangkat dan kamera yang menjalankan aplikasi Anda. Anda juga akan menggunakan klien untuk membuat LowLightBoostSession. (Anda akan menggunakan sesi untuk mengaktifkan dan menonaktifkan low light boost.) Anda juga dapat menyiapkan pemroses untuk menerima callback saat low light boost aktif.

Metode LowLightBoostClient tidak menandakan keberhasilan atau kegagalan secara langsung. Sebagai gantinya, metode ini menampilkan objek Task. Anda menggunakan Task untuk menyiapkan pemroses keberhasilan dan kegagalan. Hal ini memungkinkan metode menandakan keberhasilan atau kegagalan secara asinkron, yang diperlukan karena metode harus berkomunikasi dengan layanan Google Play.

Dependensi

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 disediakan oleh paket com.google.android.gms.cameralowlight layanan Google Play. Lihat dokumentasi layanan Google Play untuk mengetahui informasi tentang cara mengakses Google Play services API.

Membuat klien

Anda memerlukan klien low light boost untuk melakukan hal lain. Kode berikut membuat klien:

Kotlin

val lowLightBoostClient = LowLightBoost.getClient(context)

Java

LowLightBoostClient lowLightBoostClient = LowLightBoost.getClient(context);

Poin-poin penting tentang kode ini

Memeriksa apakah low light boost didukung

Setelah memiliki klien, Anda dapat memeriksa apakah low light boost didukung oleh perangkat yang menjalankan aplikasi. Kode berikut memeriksa apakah low light boost didukung:

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

Poin-poin penting tentang kode ini

  • cameraId diasumsikan sebagai ID kamera Camera2 kamera, yang dibuat di tempat lain.
  • LowLightBoostClient.isCameraSupported() memeriksa apakah kamera Camera2 mendukung low light boost. Dalam beberapa kasus, perangkat mungkin mendukung low light boost, tetapi salah satu kameranya mungkin tidak mendukung, sehingga Anda harus memeriksa keduanya.
  • Metode LowLightBoostClient.isCameraSupported() menampilkan objek Task. Anda menggunakan objek ini untuk menyiapkan pemroses keberhasilan dan kegagalan. Buat sesi low light boost di dalam pemroses keberhasilan.

Memeriksa apakah modul low light boost diinstal

Setelah memiliki klien, Anda dapat mengonfirmasi apakah modul low light boost diinstal di perangkat Anda. Kode berikut memeriksa apakah modul diinstal:

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

Poin-poin penting tentang kode ini

  • Kode ini membuka sesi kamera yang terhubung ke kamera yang diidentifikasi oleh cameraId. Untuk mengetahui informasi selengkapnya, lihat dokumentasi Camera2.
  • Metode LowLightBoostClient.isModuleInstalled() menampilkan objek Task. Anda menggunakan objek ini untuk menyiapkan pemroses keberhasilan dan kegagalan.
  • Gunakan Task.addOnSuccessListener() untuk menyiapkan pemroses yang dipanggil jika panggilan ke isModuleInstalled() berhasil. Yang penting, jika pemroses keberhasilan dipanggil, hal ini hanya memberi tahu Anda bahwa klien berhasil mengetahui apakah modul diinstal di perangkat. Di isi pemroses, Anda harus memeriksa apakah modul benar-benar diinstal atau tidak.
  • Jika modul belum diinstal, cuplikan ini akan menginstalnya dengan memanggil metode launchInstallRequest(). Metode tersebut ditentukan dalam cuplikan di Menginstal modul low light boost.

Menginstal modul low light boost

Jika modul low light boost belum diinstal di perangkat, Anda harus mendownload dan menginstalnya dari layanan Google Play. Kode ini menunjukkan cara melakukannya:

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

Poin-poin penting tentang kode ini

  • Saat memanggil LowLightBoostClient.installModule() , Anda akan meneruskan objek callback, yang mengimplementasikan LowLightBoostClient.InstallStatusCallback. installModule() memanggil metode dalam callback tersebut untuk menunjukkan status download. Misalnya, jika download dijeda, installModule() akan memanggil metode objek callback onDownloadPause().
  • Dalam cuplikan kode ini, objek callback dibuat oleh metode createInstallStatusCallback(). Anda harus menulis metode tersebut sendiri, dengan mengikuti langkah-langkah berikut:

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() memeriksa apakah perangkat dan sistem operasi yang didukung Android mendukung Google Low Light Boost. Jika tidak, jangan download modul.

  • Metode LowLightBoostClient.installModule() menampilkan objek Task. Anda menggunakan objek ini untuk menyiapkan pemroses keberhasilan dan kegagalan.

  • Saat penginstalan selesai, pemroses keberhasilan akan memverifikasi penginstalan dengan membuka kamera. Dalam cuplikan, hal ini dilakukan dengan panggilan ke openCamera(). Anda harus menulis metode tersebut sendiri.