หากต้องการใช้การเพิ่มแสงในสภาวะแสงน้อยของ 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()
คุณจะต้องเขียนวิธีการดังกล่าวด้วยตนเอง