Membuat dan menggunakan klien pengoptimalan cahaya redup

Untuk menggunakan Peningkatan Cahaya Redup Google, Anda memerlukan klien peningkatan cahaya redup. Anda dapat menggunakan klien untuk memeriksa apakah modul peningkatan cahaya rendah diinstal, dan untuk memeriksa apakah Google Low Light Boost didukung oleh perangkat dan kamera tempat aplikasi Anda berjalan. Anda juga akan menggunakan klien untuk membuat LowLightBoostSession. (Anda akan menggunakan sesi untuk mengaktifkan dan menonaktifkan peningkatan cahaya redup.) Anda juga dapat menyiapkan pemroses untuk menerima callback saat peningkatan cahaya redup 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 perlu berkomunikasi dengan layanan Google Play.

Dependensi

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

Membuat klien

Anda memerlukan klien pengoptimalan cahaya redup untuk melakukan hal lain. Kode berikut membuat klien:

Kotlin

val lowLightBoostClient = LowLightBoost.getClient(context)

Java

LowLightBoostClient lowLightBoostClient = LowLightBoost.getClient(context);

Poin penting tentang kode ini

Memeriksa apakah modul peningkatan cahaya redup telah diinstal

Setelah memiliki klien, Anda dapat mengonfirmasi apakah modul peningkatan cahaya rendah diinstal di perangkat Anda. Kode berikut memeriksa apakah modul telah 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 penting tentang kode ini

  • Kode ini membuka sesi kamera yang terhubung ke kamera yang diidentifikasi oleh cameraId. Untuk informasi selengkapnya, lihat dokumentasi Camera2.
  • Metode LowLightBoostClient.isModuleInstalled() akan 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 itu hanya memberi tahu Anda bahwa klien berhasil mengetahui apakah modul diinstal di perangkat. Dalam isi pemroses, Anda perlu 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 peningkatan cahaya redup.

Menginstal modul peningkatan cahaya redup

Jika modul peningkatan cahaya redup 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 penting tentang kode ini

  • Saat memanggil LowLightBoostClient.installModule(), Anda 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 onDownloadPause() objek callback.
  • Dalam cuplikan kode ini, objek callback dibuat oleh metode createInstallStatusCallback(). Anda harus menulis metode tersebut sendiri, seperti ini:

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() akan menampilkan objek Task. Anda menggunakan objek ini untuk menyiapkan pemroses keberhasilan dan kegagalan.

  • Setelah 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.

Memeriksa apakah peningkatan cahaya redup didukung

Setelah memiliki klien, Anda dapat memeriksa apakah peningkatan cahaya redup didukung oleh perangkat tempat aplikasi berjalan. Kode berikut memeriksa apakah peningkatan cahaya rendah 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 penting tentang kode ini

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