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

Google Düşük Işık Güçlendirme özelliğini kullanmak için bir düşük ışık güçlendirme istemcisi'ne ihtiyacınız vardır. Düşük ışıkta artırma modülünün yüklü olup olmadığını ve Google Düşük Işıkta Artırma özelliğinin, uygulamanızın çalıştığı cihaz ve kamera tarafından desteklenip desteklenmediğini kontrol etmek için istemciyi kullanabilirsiniz. Müşteriyi LowLightBoostSession oluşturmak için de kullanırsınız. (Düşük ışıkta artırma özelliğini açmak ve kapatmak için oturumu kullanırsınız.) Ayrıca, düşük ışıkta artırma etkin olduğunda geri arama almak için bir dinleyici de ayarlayabilirsiniz.

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

Bağımlılıklar

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, 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 artırma istemciniz olmalıdı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 ışıkta artırma modülünün yüklü olup olmadığını kontrol etme

Bir istemci edindikten sonra, düşük ışıkta artırma 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 dokümanlarını inceleyin.
  • LowLightBoostClient.isModuleInstalled() yöntemi, bir Task nesnesi döndürür. Başarı ve başarısızlık dinleyicilerini ayarlamak için bu nesneyi kullanırsınız.
  • isModuleInstalled() adresine yapılan çağrı başarılı olursa çağrılan bir dinleyici ayarlamak için Task.addOnSuccessListener() öğesini kullanın. Başarı dinleyicisinin çağrılması, istemcinin modülün cihaza yüklü olup olmadığını öğrenmeyi başardığını 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, Düşük ışık güçlendirme modülünü yükleme bölümündeki snippet'te tanımlanmıştır.

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

Düşük ışıkta artırma modülü cihaza yüklü değilse Google Play Hizmetleri'nden indirip yüklemeniz gerekir. Bu kodda, bunun nasıl yapılacağı gösterilmektedir:

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 iletmeniz gerekir. installModule(), indirme işleminin durumunu belirtmek için bu geri çağırma işlevindeki yöntemleri çağırır. Örneğin, indirme duraklatılırsa installModule(), geri çağırma nesnesinin onDownloadPause() yöntemini çağırır.
  • Bu kod snippet'inde geri çağırma nesnesi, createInstallStatusCallback() yöntemi tarafından oluşturulur. Bu yöntemi 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şıkta Güçlendirme özelliğini destekleyip desteklemediğini kontrol eder. Aksi takdirde modülü indirmeyin.

  • LowLightBoostClient.installModule() yöntemi, bir Task nesnesi döndürür. Başarı ve başarısızlık dinleyicilerini ayarlamak için bu nesneyi kullanırsınız.

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

Düşük ışık güçlendirmesinin desteklenip desteklenmediğini kontrol etme

Bir istemciniz olduktan sonra, düşük ışıkta artırma özelliğinin uygulamanın çalıştığı cihaz tarafından desteklenip desteklenmediğini kontrol edebilirsiniz. Aşağıdaki kod, düşük ışıkta artırma ö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şturulmuş Camera2 kamerasının kimliği olarak kabul edilir.
  • LowLightBoostClient.isCameraSupported() Camera2 kamerasının düşük ışıkta artırmayı destekleyip desteklemediğini kontrol eder. Bazı durumlarda, bir cihaz düşük ışıkta artırmayı destekleyebilir ancak kameralarından biri desteklemeyebilir. Bu nedenle, her ikisini de kontrol etmeniz gerekir.
  • LowLightBoostClient.isCameraSupported() yöntemi bir Task nesnesi döndürür. Başarı ve başarısızlık dinleyicilerini ayarlamak için bu nesneyi kullanırsınız. Başarı işleyici içinde düşük ışık güçlendirme oturumunu oluşturun.