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