สร้างและใช้ไคลเอ็นต์การเพิ่มคุณภาพในโหมดแสงน้อย

หากต้องการใช้การเพิ่มแสงในสภาวะแสงน้อยของ Google คุณจะต้องมีไคลเอ็นต์การเพิ่มแสงในสภาวะแสงน้อย คุณสามารถใช้ ไคลเอ็นต์เพื่อตรวจสอบว่าได้ติดตั้งโมดูลการเพิ่มประสิทธิภาพในสภาวะแสงน้อยแล้วหรือไม่ และเพื่อตรวจสอบ ว่าอุปกรณ์และกล้องที่แอปของคุณทำงานอยู่รองรับ Google Low Light Boost หรือไม่ นอกจากนี้ คุณยังใช้ไคลเอ็นต์เพื่อสร้าง LowLightBoostSession ได้ด้วย (คุณจะใช้เซสชันเพื่อเปิดและปิดการเพิ่มประสิทธิภาพในที่แสงน้อย) นอกจากนี้ คุณยัง ตั้งค่า Listener เพื่อรับการเรียกกลับเมื่อการเพิ่มประสิทธิภาพในสภาวะแสงน้อยทำงานอยู่ได้ด้วย

LowLightBoostClient ไม่ได้ส่งสัญญาณความสำเร็จหรือความล้มเหลวโดยตรง แต่จะแสดงผลออบเจ็กต์ Task แทน คุณใช้ Task เพื่อตั้งค่าเครื่องมือฟังความสําเร็จและความล้มเหลว ซึ่งจะช่วยให้เมธอดส่งสัญญาณความสำเร็จหรือความล้มเหลวแบบไม่พร้อมกันได้ ซึ่ง จำเป็นเนื่องจากเมธอดต้องสื่อสารกับบริการ Google Play

การขึ้นต่อกัน

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 com.google.android.gms.cameralowlight ดูข้อมูลเกี่ยวกับการเข้าถึง API ของบริการ Google Play ได้ในเอกสารประกอบของบริการ Google Play

สร้างไคลเอ็นต์

คุณต้องมีไคลเอ็นต์การเพิ่มประสิทธิภาพในที่แสงน้อยจึงจะทำอย่างอื่นได้ โค้ดต่อไปนี้ สร้างไคลเอ็นต์

Kotlin

val lowLightBoostClient = LowLightBoost.getClient(context)

Java

LowLightBoostClient lowLightBoostClient = LowLightBoost.getClient(context);

ประเด็นสำคัญเกี่ยวกับรหัสนี้

  • คลาส LowLightBoost มีเมธอดแบบคงที่ getClient ซึ่งแสดงผลอินสแตนซ์ของ LowLightBoostClient

ตรวจสอบว่าอุปกรณ์รองรับการเพิ่มแสงในสภาวะแสงน้อยหรือไม่

เมื่อมีไคลเอ็นต์แล้ว คุณจะตรวจสอบได้ว่าอุปกรณ์ที่แอปทำงานอยู่รองรับการเพิ่มประสิทธิภาพในที่แสงน้อยหรือไม่ โค้ดต่อไปนี้จะตรวจสอบว่าอุปกรณ์รองรับการเพิ่มแสงในสภาวะแสงน้อยหรือไม่

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

ประเด็นสำคัญเกี่ยวกับรหัสนี้

  • cameraId ถือเป็นรหัสของกล้อง Camera2 ที่สร้างขึ้นที่อื่น
  • LowLightBoostClient.isCameraSupported() ตรวจสอบว่ากล้อง Camera2 รองรับการเพิ่มประสิทธิภาพในที่แสงน้อยหรือไม่ ในบางกรณี อุปกรณ์อาจรองรับการเพิ่มประสิทธิภาพในสภาวะแสงน้อย แต่กล้องตัวใดตัวหนึ่งอาจไม่รองรับ ดังนั้นคุณ ต้องตรวจสอบทั้ง 2 อย่าง
  • เมธอด LowLightBoostClient.isCameraSupported() จะแสดงผลออบเจ็กต์ Task คุณใช้ออบเจ็กต์นี้เพื่อตั้งค่าเครื่องมือฟังที่สำเร็จและล้มเหลว สร้าง เซสชันการเพิ่มแสงในสภาวะแสงน้อยภายในเครื่องมือฟังความสำเร็จ

ตรวจสอบว่าได้ติดตั้งโมดูลเพิ่มประสิทธิภาพในที่แสงน้อยแล้ว

เมื่อมีไคลเอ็นต์แล้ว คุณจะยืนยันได้ว่ามีการติดตั้งโมดูลเพิ่มประสิทธิภาพในสภาวะแสงน้อยในอุปกรณ์หรือไม่ โค้ดต่อไปนี้จะตรวจสอบว่ามีการติดตั้งโมดูลหรือไม่

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

ประเด็นสำคัญเกี่ยวกับรหัสนี้

  • โค้ดนี้���ะเปิดเซสชันกล้องที่เชื่อมต่อกับกล้องที่ระบุโดย cameraId ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบของ Camera2
  • เมธอด LowLightBoostClient.isModuleInstalled() จะแสดงผลออบเจ็กต์ Task คุณใช้ออบเจ็กต์นี้เพื่อตั้งค่าเครื่องมือฟังที่สำเร็จและล้มเหลว
  • ใช้ Task.addOnSuccessListener() เพื่อตั้งค่า Listener ที่จะเรียกใช้หากการ เรียกใช้ isModuleInstalled() สำเร็จ สิ่งสำคัญคือ หากมีการเรียกใช้เครื่องมือฟังความสำเร็จ ก็เพียงแค่บอกว่าไคลเอ็นต์ประสบความสำเร็จในการค้นหาว่ามีการติดตั้งโมดูลในอุปกรณ์หรือไม่ ในส่วนเนื้อหาของ Listener คุณต้องตรวจสอบว่ามีการติดตั้งโมดูลจริงหรือไม่
  • หากยังไม่ได้ติดตั้งโมดูลนี้ ข้อมูลโค้ดนี้จะติดตั้งโมดูลโดยเรียกใช้เมธอด launchInstallRequest() ซึ่งกำหนดไว้ในข้อมูลโค้ดในติดตั้งโมดูลการเพิ่มประสิทธิภาพในสภาวะแสงน้อย

ติดตั้งโมดูลการเพิ่มแสงในสภาวะแสงน้อย

หากยังไม่ได้ติดตั้งโมดูลการเพิ่มประสิทธิภาพในที่แสงน้อยในอุปกรณ์ คุณจะต้อง ดาวน์โหลดและติดตั้งจากบริการ Google Play โค้ดนี้แสดงวิธีทำดังนี้

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

ประเด็นสำคัญเกี่ยวกับรหัสนี้

  • เมื่อโทรหา LowLightBoostClient.installModule() คุณจะส่งออบเจ็กต์การเรียกกลับ ซึ่งจะใช้ LowLightBoostClient.InstallStatusCallback installModule() จะเรียกใช้เมธอดใน Callback นั้นเพื่อระบุสถานะของการดาวน์โหลด ตัวอย่างเช่น หากหยุดการดาวน์โหลดชั่วคราว installModule() จะเรียกใช้เมธอด onDownloadPause() ของ ออบเจ็กต์การเรียกกลับ
  • ในข้อมูลโค้ดนี้ ออบเจ็กต์การเรียกกลับสร้างขึ้นโดยเมธอด createInstallStatusCallback() คุณจะต้องเขียนเมธอดนั้นด้วยตัวเองในลักษณะต่อไปนี้

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 รองรับ Google Low Light Boost หรือไม่ หากไม่ต้องการ ให้ไม่ต้องดาวน์โหลดโมดูล

  • เมธอด LowLightBoostClient.installModule() จะแสดงผลออบเจ็กต์ Task คุณใช้ออบเจ็กต์นี้เพื่อตั้งค่าเครื่องมือฟังที่สำเร็จและล้มเหลว

  • เมื่อการติดตั้งเสร็จสิ้น ตัวตรวจหาความสำเร็จจะยืนยันการติดตั้งโดย เปิดกล้อง ในข้อมูลโค้ด การดำเนินการนี้จะทำได้ด้วยการเรียกใช้ openCamera() คุณจะต้องเขียนวิธีการดังกล่าวด้วยตนเอง