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

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

LowLightBoostClient 메서드는 성공 또는 실패를 직접 신호로 전달하지 않습니다. 대신 Task 객체를 반환합니다. Task를 사용하여 성공 및 실패 리스너를 설정합니다. 이렇게 하면 메서드가 성공 또는 실패를 비동기식으로 신호할 수 있습니다. 이는 메서드가 Google Play 서비스와 통신해야 하므로 필요합니다.

종속 항목

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 서비스 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

// 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() 호출로 이 작업을 실행합니다. 이 메서드는 직접 작성해야 합니다.

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

클라이언트가 있으면 앱이 실행 중인 기기에서 저조도 부스트가 지원되는지 확인할 수 있습니다. 다음 코드는 저조도 부스트가 지원되는지 확인합니다.

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 객체를 반환합니다. 이 객체를 사용하여 성공 및 실패 리스너를 설정합니다. 성공 리스너 내에서 어두운 조명 모드 세션을 만듭니다.