Düşük ışıkta artırma istemcisi oluşturma ve kullanma

Google Düşük Işık Güçlendirme özelliğini kullanmak için düşük ışık güçlendirme istemcisine ihtiyacınız vardır. Düşük ışık artırma modülünün yüklü olup olmadığını kontrol etmek ve uygulamanızın çalıştığı cihaz ile kamerada Google Düşük Işık Artırma özelliğinin desteklenip desteklenmediğini kontrol etmek için istemciyi kullanabilirsiniz. Ayrıca LowLightBoostSession oluşturmak için de istemciyi kullanacaksınız. (Zayıf ışık güçlendirmeyi açıp kapatmak için oturumu kullanırsınız.) Ayrıca, düşük ışık artırma özelliği etkin olduğunda geri aramalar almak için bir dinleyici de ayarlayabilirsiniz.

LowLightBoostClient yöntemleri, başarı veya başarısızlığı doğrudan belirtmez. Bunun yerine Task nesnesi döndürürler. Başarı ve hata dinleyicilerini ayarlamak için Task kullanırsınız. Bu, yöntemlerin başarılı veya başarısız olduğunu eşzamansız olarak bildirmesine olanak tanır. Yöntemlerin Google Play Hizmetleri ile iletişim kurması gerektiğinden bu gereklidir.

Bağımlılıklar

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, Google Play Hizmetleri com.google.android.gms.cameralowlight paketi tarafından sağlanır. Google Play Hizmetleri API'lerine erişme hakkında bilgi edinmek için Google Play Hizmetleri belgelerine bakın.

İstemci oluşturma

Başka bir işlem yapmak için düşük ışıkta görüntü iyileştirme istemcisine ihtiyacınız vardır. Aşağıdaki kod bir istemci oluşturur:

Kotlin

val lowLightBoostClient = LowLightBoost.getClient(context)

Java

LowLightBoostClient lowLightBoostClient = LowLightBoost.getClient(context);

Bu kodla ilgili önemli noktalar

Düşük ışık güçlendirme özelliğinin desteklenip desteklenmediğini kontrol etme

Bir istemciniz olduğunda, uygulamanın üzerinde çalıştığı cihazın düşük ışık iyileştirme özelliğini destekleyip desteklemediğini kontrol edebilirsiniz. Aşağıdaki kod, düşük ışık güçlendirme özelliğinin desteklenip desteklenmediğini kontrol eder:

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

Bu kodla ilgili önemli noktalar

  • cameraId, başka bir yerde oluşturulan Camera2 kameranın kimliği olarak kabul edilir.
  • LowLightBoostClient.isCameraSupported() Camera2 kameranın düşük ışıkta iyileştirme özelliğini destekleyip desteklemediğini kontrol eder. Bazı durumlarda, bir cihaz düşük ışıkta iyileştirme özelliğini destekleyebilir ancak kameralarından biri desteklemeyebilir. Bu nedenle, her ikisini de kontrol etmeniz gerekir.
  • LowLightBoostClient.isCameraSupported() yöntemi, Task nesnesini döndürür. Bu nesneyi, başarı ve hata dinleyicilerini ayarlamak için kullanırsınız. Başarı işleyicinin içinde düşük ışık güçlendirme oturumu oluşturun.

Zayıf ışıkta iyileştirme modülünün yüklü olup olmadığını kontrol edin

Bir istemciniz olduğunda, düşük ışıkta iyileştirme modülünün cihazınıza yüklenip yüklenmediğini onaylayabilirsiniz. Aşağıdaki kod, modülün yüklü olup olmadığını kontrol eder:

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

Bu kodla ilgili önemli noktalar

  • Bu kod, cameraId ile tanımlanan kameraya bağlanan bir kamera oturumu açar. Daha fazla bilgi için Camera2 belgelerine bakın.
  • Yöntem LowLightBoostClient.isModuleInstalled() bir Task nesnesi döndürür. Bu nesneyi, başarı ve hata dinleyicilerini ayarlamak için kullanırsınız.
  • Task.addOnSuccessListener() kullanarak isModuleInstalled() çağrısı başarılı olursa çağrılan bir dinleyici ayarlayın. Önemli olarak, başarı dinleyicisi çağrılırsa bu yalnızca istemcinin modülün cihaza yüklenip yüklenmediğini öğrenmede başarılı olduğunu gösterir. Dinleyicinizin gövdesinde, modülün gerçekten yüklü olup olmadığını kontrol etmeniz gerekir.
  • Modül yüklü değilse bu snippet, launchInstallRequest() yöntemini çağırarak modülü yükler. Bu yöntem, Install the low light boost module (Zayıf ışıkta iyileştirme modülünü yükleme) bölümündeki snippet'te tanımlanır.

Düşük ışık güçlendirme modülünü yükleyin

Düşük ışıkta iyileştirme modülü cihazda yüklü değilse Google Play Hizmetleri'nden indirip yüklemeniz gerekir. Bu kod, söz konusu işlemin nasıl yapılacağını gösterir:

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

Bu kodla ilgili önemli noktalar

  • LowLightBoostClient.installModule() işlevini çağırdığınızda, LowLightBoostClient.InstallStatusCallback işlevini uygulayan bir geri çağırma nesnesi iletirsiniz. installModule(), indirme durumunu belirtmek için bu geri çağırmadaki yöntemleri çağırır. Örneğin, indirme işlemi duraklatılırsa installModule(), geri çağırma nesnesinin onDownloadPause() yöntemini çağırır.
  • Bu kod snippet'inde geri çağırma nesnesi, createInstallStatusCallback() yöntemiyle oluşturulur. Bu yöntemi şu şekilde kendiniz yazmanız gerekir:

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() Android destekli cihazın ve işletim sisteminin Google Düşük Işık Geliştirme'yi destekleyip desteklemediğini kontrol eder. Aksi takdirde modülü indirmeyin.

  • Yöntem LowLightBoostClient.installModule() bir Task nesnesi döndürür. Bu nesneyi, başarı ve hata dinleyicilerini ayarlamak için kullanırsınız.

  • Yükleme tamamlandığında başarı dinleyicisi, kamerayı açarak yüklemeyi doğrular. Snippet'te bu işlem, openCamera() çağrısıyla yapılır. Bu yöntemi kendiniz yazmanız gerekir.