ข่าวสารเกี่ยวกับผลิตภัณฑ์
มากกว่าฟีเจอร์เดียว: การรับประกันการทำงานร่วมกันของฟีเจอร์ด้วย CameraX 1.5
อ่าน 6 นาที
แอปกล้องถ่ายรูปสมัยใหม่โดดเด่นด้วยฟีเจอร์ที่ทรงพลังและทำงานร่วมกันได้ ผู้ใช้คาดหวังว่าจะได้บันทึกวิดีโอด้วย HDR ที่สวยงาม จับภาพการเคลื่อนไหวที่ลื่นไหลที่ 60 FPS และได้ฟุตเทจที่ราบรื่นด้วยการป้องกันภาพสั่นไหวในการแสดงตัวอย่าง ซึ่งมักจะเกิดขึ้นพร้อมๆ กัน
ในฐานะนักพัฒนาแอป เราทราบดีว่าความเป็นจริงนั้นซับซ้อนกว่า คุณจะรับประกันได้อย่างไรว่าอุปกรณ์หนึ่งๆ รองรับการทำงานร่วมกันของฟีเจอร์ที่เฉพาะเจาะจง จนถึงตอนนี้ การเปิดใช้ฟีเจอร์หลายรายการมักเป็นการเสี่ยง คุณอาจตรวจสอบการรองรับฟีเจอร์แต่ละรายการได้ แต่การรวมฟีเจอร์เหล่านั้นเข้าด้วยกันอาจทำให้เกิดลักษณะการทำงานที่ไม่แน่นอนหรือแย่กว่านั้นคือเซสชันกล้องถ่ายรูปไม่สำเร็จ ความไม่แน่นอนนี้บังคับให้นักพัฒนาแอปต้องระมัดระวัง ซึ่งทำให้ผู้ใช้ในอุปกรณ์ที่มีความสามารถไม่สามารถเข้าถึงประสบการณ์การใช้งานที่ดีที่สุดเท่าที่จะเป็นไปได้
ตัวอย่างเช่น มีอุปกรณ์ระดับพรีเมียมเพียงไม่กี่รุ่นที่รองรับวิดีโอ HDR และ 60 FPS พร้อมกันได้อย่างน่าเชื่อถือ ด้วยเหตุนี้ แอปส่วนใหญ่จึงหลีกเลี่ยงการเปิดใช้ทั้ง 2 ฟีเจอร์พร้อมกันเพื่อป้องกันไม่ให้ผู้ใช้ส่วนใหญ่ได้รับประสบการณ์การใช้งานที่ไม่ดี
เราจึงขอแนะนำ Feature Group ใน CameraX - API ใหม่ที่ออกแบบมาเพื่อขจัดความไม่แน่นอนนี้ ตอนนี้คุณสามารถค้นหาว่ามีการรองรับการทำงานร่วมกันของฟีเจอร์ที่เฉพาะเจาะจงหรือไม่ ก่อน กำหนดค่ากล้องถ่ายรูป หรือเพียงแค่บอก CameraX ถึงลำดับความสำคัญของคุณ แล้วให้ CameraX เปิดใช้การทำงานร่วมกันของฟีเจอร์ที่รองรับได้ดีที่สุดให้คุณ
สำหรับผู้ที่เพิ่งเริ่มใช้ CameraX
ก่อนที่จะเจาะลึก API ของ Feature Group ใหม่ เรามาสรุปสั้นๆ เกี่ยวกับ CameraX กันก่อน CameraX คือไลบรารีการสนับสนุน Jetpack ที่สร้างขึ้นเพื่อช่วยให้คุณพัฒนาแอปกล้องถ่ายรูปได้ง่ายขึ้น โดยมีอินเทอร์เฟซ API ที่สอดคล้องกันและใช้งานง่าย ซึ่งทำงานได้ในอุปกรณ์ Android ส่วนใหญ่ และมีความเข้ากันได้แบบย้อนหลังกับ Android 6.0 (API ระดับ 23) หากคุณเพิ่งเริ่มใช้ CameraX เราขอแนะนำให้ดูเอกสารประกอบอย่างเป็นทางการและลองใช้Codelabเพื่อเริ่มต้นใช้งาน
สิ่งที่คุณสร้างได้ด้วย API ของ Feature Group
คุณไม่จำเป็นต้องเสี่ยงกับการทำงานร่วมกันของฟีเจอร์อีกต่อไป และสามารถมอบประสบการณ์การใช้งานกล้องถ่ายรูปที่ดีที่สุดเท่าที่จะเป็นไปได้ เช่น วิดีโอ HDR และ 60 FPS พร้อมกันในฮาร์ดแวร์ที่มีความสามารถ (เช่น Pixel 10 Pro) ได้อย่างมั่นใจ พร้อมทั้งหลีกเลี่ยงข้อผิดพลาดในอุปกรณ์ที่ไม่รองรับการทำงานร่วมกันของฟีเจอร์เหล่านั้น
Pixel 10 Pro เปิดใช้ทั้ง HDR และ 60 FPS พร้อมกัน
ในอุปกรณ์รุ่นเก่าที่ HDR และ 60 FPS ไม่สามารถทำงานพร้อมกันได้ ระบบจะเปิดใช้เฉพาะ HDR ขณะที่ตัวเลือก 60 FPS จะปิดใช้
API ของ Feature Group ช่วยให้คุณทำสิ่งต่อไปนี้ได้
- สร้าง UI ที่ชาญฉลาดและไดนามิก: เปิดใช้หรือปิดใช้การตั้งค่าใน UI อย่างชาญฉลาดโดยอิงตามการรองรับฮาร์ดแวร์แบบเรียลไทม์ ตัวอย่างเช่น หากผู้ใช้เปิดใช้ HDR คุณสามารถทำให้ตัวเลือก 60 FPS เป็นสีเทาทันทีและปิดใช้ตัวเลือกดังกล่าวหากอุปกรณ์นั้นไม่รองรับการทำงานร่วมกันของฟีเจอร์ทั้ง 2 รายการ
- มอบโหมด "คุณภาพสูง" ที่เชื่อถือได้: กำหนดค่ากล้องถ่ายรูปด้วยรายการฟีเจอร์ที่ต้องการซึ่งจัดลำดับความสำคัญแล้ว CameraX จะค้นหาและเปิดใช้การทำงานร่วมกันของฟีเจอร์ที่รองรับได้ดีที่สุดสำหรับอุปกรณ์หนึ่งๆ โดยอัตโนมัติ ซึ่งจะช่วยให้ได้ผลลัพธ์ที่ยอดเยี่ยมโดยไม่ต้องใช้ตรรกะที่ซับซ้อนและเฉพาะเจาะจงกับอุปกรณ์
- ป้องกันไม่ให้เซสชันกล้องถ่ายรูปไม่สำเร็จ: การตรวจสอบการรองรับล่วงหน้าจะช่วยป้องกันไม่ให้กล้องถ่ายรูปพยายามกำหนดค่าการทำงานร่วมกันของฟีเจอร์ที่ไม่รองรับ ซึ่งจะช่วยขจัดสาเหตุทั่วไปที่ทำให้เกิดข้อขัดข้องและมอบประสบการณ์การใช้งานที่ราบรื่นให้แก่ผู้ใช้
วิธีการทำงาน: องค์ประกอบหลัก
API ใหม่นี้เน้นการเพิ่มฟีเจอร์ที่สำคัญลงใน SessionConfig และ CameraInfo
- GroupableFeature: API นี้จะแนะนำชุดฟีเจอร์ที่จัดกลุ่มได้ซึ่งกำหนดไว้ล่วงหน้า เช่น HDR_HLG10, FPS_60, PREVIEW_STABILIZATION และ IMAGE_ULTRA_HDR เนื่องจากข้อจำกัดด้านการคำนวณ จึงมีเพียงชุดฟีเจอร์ที่เฉพาะเจาะจงเท่านั้นที่สามารถจัดกลุ่มได้ด้วยความน่าเชื่อถือสูงตามที่ API นี้มอบให้ เรากำลังดำเนินการอย่างจริงจังเพื่อขยายรายการนี้และจะเปิดตัวการรองรับฟีเจอร์เพิ่มเติมในรุ่นที่จะเผยแพร่ในอนาคต
- พารามิเตอร์SessionConfigใหม่: คลาสนี้ใช้สำหรับเริ่มเซสชันกล้องถ่ายรูป และตอนนี้ยอมรับพารามิเตอร์ใหม่ 2 รายการแล้ว ดังนี้
requiredFeatureGroup: ใช้พารามิเตอร์นี้สำหรับฟีเจอร์ที่ต้อง ได้รับการรองรับเพื่อให้การกำหนดค่าสำเร็จ ซึ่งเหมาะสำหรับฟีเจอร์ที่ผู้ใช้เปิดใช้โดยชัดแจ้ง เช่น การสลับสวิตช์ "HDR" เพื่อให้ได้รับประสบการณ์การใช้งานที่แน่นอนและสอดคล้อง การเรียกbindToLifecycleจะส่งIllegalArgumentExceptionหากไม่มีการรองรับการทำงานร่วมกันของฟีเจอร์ที่ขอไว้ แทนที่จะละเว้นคำขอฟีเจอร์อย่างเงียบๆ คุณควรใช้ APICameraInfo#isFeatureGroupSupported(ดูรายละเอียดด้านล่าง) เพื่อค้นหาผลลัพธ์นี้ล่วงหน้าpreferredFeatureGroup: ใช้พารามิเตอร์นี้สำหรับฟีเจอร์ที่ต้องการแต่ไม่บังคับ เช่น เมื่อคุณต้องการใช้โหมด "คุณภาพสูง" เป็นค่าเริ่มต้น คุณระบุรายการฟีเจอร์ที่ต้องการตามลำดับความสำคัญ แล้ว CameraX จะเปิดใช้การทำงานร่วมกันของฟีเจอร์ที่มีลำดับความสำคัญสูงสุดที่อุปกรณ์รองรับโดยอัตโนมัติ
- CameraInfo#isFeatureGroupSupported(): นี่คือเมธอดการค้นหาหลักสำหรับตรวจสอบอย่างชัดแจ้งว่ามีการรองรับกลุ่มฟีเจอร์หรือไม่ ซึ่งเหมาะสำหรับการแสดงเฉพาะตัวเลือกฟีเจอร์ที่รองรับให้ผู้ใช้เห็นใน UI ของแอป คุณส่ง
SessionConfigไปยังเมธอดนี้ แล้วเมธอดจะแสดงค่าบูลีนที่ระบุว่ามีการรองรับการทำงานร่วมกันของฟีเจอร์หรือไม่ หากคุณต้องการผูกSessionConfigกับฟีเจอร์ที่จำเป็น คุณควรใช้ API นี้ก่อนเพื่อให้แน่ใจว่ามีการรองรับ
การใช้งานจริง
มาดูวิธีใช้คอมโพเนนต์เหล่านี้เพื่อสร้างประสบการณ์การใช้งานกล้องถ่ายรูปที่ดีขึ้นกัน
สถานการณ์ที่ 1: โหมดคุณภาพสูง "ดีที่สุดเท่าที่จะทำได้"
หากต้องการเปิดใช้ฟีเจอร์ที่ดีที่สุดเท่าที่จะเป็นไปได้โดยค่าเริ่มต้น คุณสามารถระบุรายการฟีเจอร์ที่จัดลำดับความสำคัญแล้วไปยัง preferredFeatureGroup ในตัวอย่างนี้ เราบอกให้ CameraX จัดลำดับความสำคัญของ HDR ก่อน จากนั้นจึงเป็น 60 FPS และสุดท้ายคือการป้องกันภาพสั่นไหวในการแสดงตัวอย่าง CameraX จะจัดการความซับซ้อนในการตรวจสอบการทำงานร่วมกันของฟีเจอร์ที่เป็นไปได้ทั้งหมดและเลือกการทำงานร่วมกันของฟีเจอร์ที่ดีที่สุดที่อุปกรณ์รองรับ
ตัวอย่างเช่น หากอุปกรณ์รองรับ HDR และ 60 FPS พร้อมกัน แต่ไม่รองรับการป้องกันภาพสั่นไหวในการแสดงตัวอย่าง CameraX จะเปิดใช้ 2 ฟีเจอร์แรกและละเว้นฟีเจอร์ที่ 3 วิธีนี้จะช่วยให้คุณได้รับประสบการณ์การใช้งานที่ดีที่สุดเท่าที่จะเป็นไปได้โดยไม่ต้องเขียนการตรวจสอบที่ซับซ้อนและเฉพาะเจาะจงกับอุปกรณ์
cameraProvider.bindToLifecycle(
lifecycleOwner,
cameraSelector,
SessionConfig(
useCases = listOf(preview, videoCapture),
// The order of features in this list determines their priority.
// CameraX will enable the best-supported combination based on these
// priorities: HDR_HLG10 > FPS_60 > Preview Stabilization.
preferredFeatureGroup =
listOf(HDR_HLG10, FPS_60, PREVIEW_STABILIZATION),
).apply {
// (Optional) Get a callback with the enabled features
// to update your UI.
setFeatureSelectionListener { selectedFeatures ->
updateUiIndicators(selectedFeatures)
}
}
)สำหรับข้อมูลโค้ดนี้ CameraX จะพยายามเปิดใช้การทำงานร่วมกันของฟีเจอร์ตามลำดับความสำคัญต่อไปนี้ โดยเลือกการทำงานร่วมกันของฟีเจอร์แรกที่อุปกรณ์รองรับอย่างเต็มที่
- HDR + 60 FPS + การป้องกันภาพสั่นไหวในการแสดงตัวอย่าง
- HDR + 60 FPS
- HDR + การป้องกันภาพสั่นไหวในการแสดงตัวอย่าง
- HDR
- 60 FPS + การป้องกันภาพสั่นไหวในการแสดงตัวอย่าง
- 60 FPS
- การป้องกันภาพสั่นไหวในการแสดงตัวอย่าง
- ไม่มีฟีเจอร์ใดเลยจากฟีเจอร์ข้างต้น
สถานการณ์ที่ 2: การสร้าง UI เชิงโต้ตอบ
หากต้องการสร้าง UI ที่ตอบสนองต่อการเลือกของผู้ใช้และป้องกันไม่ให้ผู้ใช้เลือกการทำงานร่วมกันของฟีเจอร์ที่ไม่รองรับ คุณสามารถค้นหาการรองรับได้โดยตรง ฟังก์ชันด้านล่างจะตรวจสอบฟีเจอร์ที่ไม่เข้ากันกับการเลือก ปัจจุบัน ของผู้ใช้ ซึ่งจะช่วยให้คุณปิดใช้องค์ประกอบ UI ที่เกี่ยวข้องได้
/**
* Returns a list of features that are NOT supported in combination
* with the currently selected features.
*/
fun getUnsupportedFeatures(
currentFeatures: Set<GroupableFeature>
): Set<GroupableFeature> {
val unsupportedFeatures = mutableSetOf<GroupableFeature>()
val appFeatureOptions = setOf(HDR_HLG10, FPS_60, PREVIEW_STABILIZATION)
// Iterate over every available feature option in your app.
appFeatureOptions.forEach { featureOption ->
// Skip features the user has already selected.
if (currentFeatures.contains(featureOption)) return@forEach
// Check if adding this new feature is supported.
val isSupported = cameraInfo.isFeatureGroupSupported(
SessionConfig(
useCases = useCases,
// Check the new feature on top of existing ones.
requiredFeatureGroup = currentFeatures + featureOption
)
)
if (!isSupported) {
unsupportedFeatures.add(featureOption)
}
}
return unsupportedFeatures
}จากนั้นคุณสามารถเชื่อมโยงตรรกะนี้เข้ากับ ViewModel หรือตัวควบคุม UI เพื่อตอบสนองต่อข้อมูลจากผู้ใช้และผูกกล้องถ่ายรูปอีกครั้งด้วยการกำหนดค่าที่รับประกันว่าจะใช้งานได้
// Invoked when user turns some feature on/off.
fun onFeatureChange(currentFeatures: Set<GroupableFeature>) {
// Identify features that are unsupported with the current selection.
val unsupportedFeatures = getUnsupportedFeatures(currentFeatures)
// Update app UI so that users can't enable them.
updateDisabledFeatures(unsupportedFeatures)
// Since the UI now only allows selecting supported feature combinations,
// `currentFeatures` is always valid. This allows setting
// `requiredFeatureGroup` directly, without needing to re-check for
// support or set a feature selection listener.
cameraProvider.bindToLifecycle(
lifecycleOwner,
cameraSelector,
SessionConfig(
useCases = listOf(preview, videoCapture),
requiredFeatureGroup = currentFeatures,
)
)
}หากต้องการดูแนวคิดเหล่านี้ในแอปพลิเคชันที่ใช้งานได้ คุณสามารถสำรวจแอปทดสอบภายในของเรา ซึ่งมีการใช้งานทั้งสถานการณ์ "ดีที่สุดเท่าที่จะทำได้" และ "UI เชิงโต้ตอบ" ที่กล่าวถึงข้างต้นอย่างสมบูรณ์
โปรดทราบว่านี่เป็นแอปพลิเคชันทดสอบและไม่ใช่ตัวอย่างที่รองรับอย่างเป็นทางการ แม้ว่าจะเป็นข้อมูลอ้างอิงที่ยอดเยี่ยมสำหรับ API ของ Feature Group แต่ก็ยังไม่ได้ปรับปรุงให้พร้อมใช้งานจริง
เริ่มต้นใช้งานวันนี้
API ของ Feature Group ช่วยขจัดความไม่แน่นอนในการทำงานร่วมกับความสามารถขั้นสูงของกล้องถ่ายรูป การระบุวิธีที่แน่นอนในการค้นหาการรองรับฟีเจอร์จะช่วยให้คุณสร้างแอปกล้องถ่ายรูปที่ทรงพลังและเชื่อถือได้มากขึ้นได้อย่างมั่นใจ
API นี้พร้อมให้บริการเป็นแบบทดลองใน CameraX 1.5 และมีกำหนดจะเสถียรอย่างเต็มที่ในรุ่น 1.6 พร้อมการรองรับและการปรับปรุงเพิ่มเติม
ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบอย่างเป็นทางการ เราแทบรอไม่ไหวที่จะได้เห็นสิ่งที่คุณสร้างขึ้น และหวังว่าจะได้รับความคิดเห็นจากคุณ โปรดแชร์ความคิดเห็นและรายงานปัญหาผ่านช่องทางต่อไปนี้
อ่านต่อ
-
ข่าวสารเกี่ยวกับผลิตภัณฑ์
ในงาน Google I/O 2026 เราได้แนะนำการเปลี่ยนแปลงของ Android จากระบบปฏิบัติการไปเป็นระบบอัจฉริยะ นอกจากนี้ เรายังได้แสดงให้เห็นวิธีสร้างประสบการณ์การใช้งานอัจฉริยะด้วยระบบโดยตรงและนำพลังของ AI จาก Google มาไว้ในแอปของคุณ
Jingyu Shi • อ่าน 2 นาที
-
ข่าวสารเกี่ยวกับผลิตภัณฑ์
เรายินดีที่จะประกาศว่าการรองรับ Unreal Engine และ Godot อย่างเป็นทางการพร้อมให้บริการแล้วสำหรับ Android XR นอกจากนี้ เรายังเปิดตัวเครื่องมือใหม่ที่ออกแบบมาเพื่อเพิ่มประสิทธิภาพในการทำงานและเปิดใช้ความสามารถใหม่ๆ ของ XR ได้แก่ Android XR Engine Hub และ Android XR Interaction Framework
Luke Hopkins, Ryan Bartley • อ่าน 4 นาที
-
ข่าวสารเกี่ยวกับผลิตภัณฑ์
เมื่อเปิดตัว Android 17 เราจะเปลี่ยนไปใช้มาตรฐานการพัฒนาแบบปรับเปลี่ยนได้เป็นอันดับแรก ผู้ใช้จะไม่พึ่งพาอุปกรณ์ที่มีฟอร์มแฟกเตอร์เดียวอีกต่อไป แต่จะเปลี่ยนไปใช้อุปกรณ์ต่างๆ เช่น โทรศัพท์ โทรศัพท์แบบพับได้ แท็บเล็ต แล็ปท็อป จอแสดงผลในรถยนต์ และสภาพแวดล้อม XR ที่สมจริงตลอดทั้งวัน
รับข่าวสาร
รับข้อมูลเชิงลึกล่าสุดเกี่ยวกับการพัฒนา Android ส่งตรงถึงกล่องจดหมายของคุณ ทุกสัปดาห์