저조도 부스트 클라이언트 만들기 및 사용

Google 저조도 부스트를 사용하려면 저조도 부스트 클라이언트가 필요합니다. 클라이언트를 사용하여 어두운 조명 부스트 모듈이 설치되어 있는지 확인하고 앱이 실행되는 기기와 카메라에서 Google 어두운 조명 부스트가 지원되는지 확인할 수 있습니다. 클라이언트를 사용하여 LowLightBoostSession도 만듭니다. (세션을 사용하여 어두운 곳에서 밝기 향상을 사용 설정하거나 사용 중지합니다.) 또한 조명이 어두운 환경에서 부스트가 활성화될 때 콜백을 수신하도록 리스너를 설정할 수도 있습니다.

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 패키지에서 제공합니다. Google Play 서비스 API에 액세스하는 방법에 대한 자세한 내용은 Google Play 서비스 문서를 참고하세요.

클라이언트 만들기

다른 작업을 하려면 저조도 개선 클라이언트가 필요합니다. 다음 코드는 클라이언트를 만듭니다.

Kotlin

val lowLightBoostClient = LowLightBoost.getClient(context)

자바

LowLightBoostClient lowLightBoostClient = LowLightBoost.getClient(context);

이 코드에 관한 핵심 사항

  • LowLightBoost 클래스는 LowLightBoostClient의 인스턴스를 반환하는 정적 메서드 getClient를 제공합니다.

어두운 조명 모드가 지원되는지 확인

클라이언트가 있으면 앱이 실행되는 기기에서 어두운 곳에서 밝게 모드가 지원되는지 확인할 수 있습니다. 다음 코드는 어두운 곳에서 부스트가 지원되는지 확인합니다.

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

자바

lowLightBoostClient
  .isCameraSupported(cameraId)
  .addOnSuccessListener(
    lowLightBoostExecutor,
    (isSupported) -> {
      Log.d(TAG, "isCameraSupported: " + isSupported);
      if (isSupported) {
        // Create the low light boost session here
      }
    )

이 코드에 관한 핵심 사항

  • cameraId는 다른 곳에서 생성된 Camera2 카메라의 ID로 간주됩니다.
  • LowLightBoostClient.isCameraSupported()는 Camera2 카메라가 어두운 조명 부스트를 지원하는지 확인합니다. 기기에서 야간 모드를 지원하지만 카메라 중 하나는 지원하지 않을 수 있으므로 두 가지를 모두 확인해야 합니다.
  • 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)
  }
}

자바

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()를 사용하여 isModuleInstalled() 호출이 성공하면 호출되는 리스너를 설정합니다. 중요한 점은 성공 리스너가 호출되면 클라이언트가 기기에 모듈이 설치되었는지 여부를 확인하는 데 성공했다는 것만 알려준다는 것입니다. 리스너 본문에서 모듈이 실제로 설치되었는지 확인해야 합니다.
  • 모듈이 아직 설치되지 않은 경우 이 스니펫은 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)
  }
}

자바

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()는 다운로드 상태를 나타내기 위해 해당 콜백의 메서드를 호출합니다. 예를 들어 다운로드가 일시중지되면 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...
  }

자바

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 저조도 개선을 지원하는지 확인합니다. 그렇지 않으면 모듈을 다운로드하지 마세요.

  • LowLightBoostClient.installModule() 메서드는 Task 객체를 반환합니다. 이 객체를 사용하여 성공 및 실패 리스너를 설정합니다.

  • 설치가 완료되면 성공 리스너가 카메라를 열어 설치를 확인합니다. 스니펫에서는 openCamera() 호출로 이 작업을 실행합니다. 이 메서드는 직접 작성해야 합니다.