Tạo và sử dụng ứng dụng tăng cường ánh sáng yếu

Để sử dụng tính năng Tăng cường ánh sáng yếu của Google, bạn cần có ứng dụng tăng cường ánh sáng yếu. Bạn có thể sử dụng ứng dụng để kiểm tra xem mô-đun tăng cường ánh sáng yếu đã được cài đặt hay chưa, cũng như để kiểm tra xem thiết bị và máy ảnh mà ứng dụng của bạn đang chạy có hỗ trợ tính năng Tăng cường ánh sáng yếu của Google hay không. Bạn cũng sẽ sử dụng ứng dụng này để tạo LowLightBoostSession. (Bạn sẽ sử dụng phiên này để bật và tắt tính năng tăng cường ánh sáng yếu.) Bạn cũng có thể thiết lập trình nghe để nhận lệnh gọi lại khi tính năng tăng cường ánh sáng yếu đang hoạt động.

Các phương thức LowLightBoostClient không trực tiếp báo hiệu trạng thái thành công hoặc không thành công. Thay vào đó, các phương thức này trả về đối tượng Task. Bạn sử dụng Task để thiết lập trình nghe thành công và không thành công. Điều này cho phép các phương thức báo hiệu trạng thái thành công hoặc không thành công một cách không đồng bộ. Điều này là cần thiết vì các phương thức cần giao tiếp với Dịch vụ Google Play.

Phần phụ thuộc

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 do gói com.google.android.gms.cameralowlight của Dịch vụ Google Play cung cấp. Hãy xem tài liệu về Dịch vụ Google Play để biết thông tin về cách truy cập vào API Dịch vụ Google Play.

Tạo ứng dụng

Bạn cần có ứng dụng tăng cường ánh sáng yếu để làm gì khác. Mã sau đây tạo một ứng dụng:

Kotlin

val lowLightBoostClient = LowLightBoost.getClient(context)

Java

LowLightBoostClient lowLightBoostClient = LowLightBoost.getClient(context);

Các điểm chính về mã này

  • Lớp LowLightBoost cung cấp phương thức tĩnh getClient. Phương thức này trả về một thực thể của LowLightBoostClient.

Kiểm tra xem đã cài đặt mô-đun tăng cường ánh sáng yếu hay chưa

Sau khi có ứng dụng, bạn có thể xác nhận xem mô-đun tăng cường ánh sáng yếu có được cài đặt trên thiết bị của bạn hay không. Mã sau đây kiểm tra xem mô-đun đã được cài đặt hay chưa:

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

Các điểm chính về mã này

  • Mã này sẽ mở một phiên máy ảnh kết nối với máy ảnh được xác định bằng cameraId. Để biết thêm thông tin, hãy xem tài liệu về Camera2.
  • Phương thức LowLightBoostClient.isModuleInstalled() trả về một đối tượng Task. Bạn sử dụng đối tượng này để thiết lập trình nghe thành công và không thành công.
  • Sử dụng Task.addOnSuccessListener() để thiết lập trình nghe được gọi nếu lệnh gọi đến isModuleInstalled() thành công. Quan trọng là nếu trình nghe thành công được gọi, thì điều đó chỉ cho bạn biết rằng ứng dụng đã thành công trong việc tìm hiểu liệu mô-đun đã được cài đặt trên thiết bị hay chưa. Trong phần nội dung của trình nghe, bạn cần kiểm tra xem mô-đun có thực sự được cài đặt hay không.
  • Nếu bạn chưa cài đặt mô-đun, đoạn mã này sẽ cài đặt mô-đun đó bằng cách gọi phương thức launchInstallRequest(). Phương thức đó được xác định trong đoạn mã trong phần Cài đặt mô-đun tăng cường ánh sáng yếu.

Cài đặt mô-đun tăng cường ánh sáng yếu

Nếu mô-đun tăng cường ánh sáng yếu chưa được cài đặt trên thiết bị, bạn cần tải xuống và cài đặt mô-đun đó qua Dịch vụ Google Play. Mã này cho biết cách thực hiện việc đó:

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

Các điểm chính về mã này

  • Khi gọi LowLightBoostClient.installModule(), bạn sẽ truyền một đối tượng gọi lại triển khai LowLightBoostClient.InstallStatusCallback. installModule() gọi các phương thức trong lệnh gọi lại đó để cho biết trạng thái của quá trình tải xuống. Ví dụ: nếu quá trình tải xuống bị tạm dừng, installModule() sẽ gọi phương thức onDownloadPause() của đối tượng gọi lại.
  • Trong đoạn mã này, đối tượng gọi lại được tạo bằng phương thức createInstallStatusCallback(). Bạn cần tự viết phương thức đó theo các dòng sau:

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() kiểm tra xem thiết bị và hệ điều hành chạy Android có hỗ trợ tính năng Tăng cường ánh sáng yếu của Google hay không. Nếu không, đừng tải mô-đun xuống.

  • Phương thức LowLightBoostClient.installModule() trả về một đối tượng Task. Bạn sử dụng đối tượng này để thiết lập trình nghe thành công và không thành công.

  • Khi quá trình cài đặt hoàn tất, trình nghe thành công sẽ xác minh quá trình cài đặt bằng cách mở máy ảnh. Trong đoạn mã, việc này được thực hiện bằng lệnh gọi đến openCamera(). Bạn sẽ cần tự viết phương thức đó.

Kiểm tra xem tính năng tăng cường ánh sáng yếu có được hỗ trợ hay không

Sau khi có ứng dụng, bạn có thể kiểm tra xem thiết bị mà ứng dụng đang chạy có hỗ trợ tính năng tăng cường ánh sáng yếu hay không. Mã sau đây kiểm tra xem tính năng tăng cường ánh sáng yếu có được hỗ trợ hay không:

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

Các điểm chính về mã này

  • cameraId được giả định là mã nhận dạng của máy ảnh Camera2, được tạo ở nơi khác.
  • LowLightBoostClient.isCameraSupported() kiểm tra xem máy ảnh Camera2 có hỗ trợ tính năng tăng cường ánh sáng yếu hay không. Trong một số trường hợp, thiết bị có thể hỗ trợ tính năng tăng cường ánh sáng yếu nhưng một trong các máy ảnh của thiết bị lại không hỗ trợ. Vì vậy, bạn cần kiểm tra cả hai.
  • Phương thức LowLightBoostClient.isCameraSupported() trả về một đối tượng Task. Bạn sử dụng đối tượng này để thiết lập trình nghe thành công và không thành công. Tạo phiên tăng cường ánh sáng yếu bên trong trình nghe thành công.