Berita Produk
Lebih dari Sekadar Fitur: Menjamin Kombinasi Fitur dengan CameraX 1.5
Waktu baca: 6 menit
Aplikasi kamera modern ditentukan oleh fitur yang canggih dan tumpang-tindih. Pengguna berharap dapat merekam video dengan HDR yang memukau, merekam gerakan yang lancar pada 60 FPS, dan mendapatkan rekaman yang sangat mulus dengan Stabilisasi Pratinjau—sering kali semuanya dilakukan secara bersamaan.
Sebagai developer, kami tahu bahwa kenyataannya lebih rumit. Bagaimana Anda dapat menjamin bahwa perangkat tertentu benar-benar mendukung kombinasi tertentu? Hingga saat ini, mengaktifkan beberapa fitur sering kali merupakan pertaruhan. Anda dapat memeriksa dukungan fitur satu per satu, tetapi menggabungkannya dapat menyebabkan perilaku yang tidak terdefinisi atau, lebih buruk lagi, sesi kamera gagal. Ketidakpastian ini memaksa developer untuk bersikap konservatif, yang mencegah pengguna di perangkat yang mumpuni mengakses pengalaman terbaik.
Misalnya, sangat sedikit perangkat premium yang mendukung video HDR dan 60 FPS secara bersamaan dengan baik. Oleh karena itu, sebagian besar aplikasi menghindari pengaktifan keduanya secara bersamaan untuk mencegah pengalaman pengguna yang buruk di sebagian besar ponsel.
Untuk mengatasi hal ini, kami memperkenalkan Grup Fitur di CameraX - API baru yang dirancang untuk menghilangkan tebakan ini. Anda kini dapat membuat kueri apakah kombinasi fitur tertentu didukung sebelum mengonfigurasi kamera, atau cukup memberi tahu CameraX prioritas Anda dan membiarkannya mengaktifkan kombinasi yang paling didukung untuk Anda.
Untuk Pengguna Baru CameraX
Sebelum membahas Feature Group API baru, mari kita rangkum secara singkat apa itu CameraX. CameraX adalah support library Jetpack, yang dibuat untuk memudahkan Anda mengembangkan aplikasi kamera. CameraX memiliki antarmuka API yang konsisten dan mudah digunakan yang dapat digunakan di sebagian besar perangkat Android, dengan kompatibilitas mundur hingga Android 6.0 (level API 23). Jika Anda baru menggunakan CameraX, sebaiknya lihat dokumentasi resmi dan coba codelab untuk memulai.
Yang Dapat Anda Buat dengan Feature Group API
Anda tidak perlu lagi berspekulasi tentang kombinasi fitur dan dapat dengan yakin memberikan pengalaman kamera terbaik – seperti video HDR dan 60 FPS simultan di hardware yang mumpuni (misalnya, Pixel 10 Pro) – sekaligus menghindari error dengan baik di perangkat yang tidak dapat mendukung kombinasi tersebut.
Pixel 10 Pro memungkinkan HDR dan 60 FPS secara bersamaan
Di perangkat lama yang tidak dapat menjalankan HDR dan 60 FPS secara bersamaan, hanya HDR yang diaktifkan, sedangkan opsi 60 FPS dinonaktifkan.
Dengan Feature Group API, Anda dapat:
- Buat UI dinamis yang lebih cerdas: Aktifkan atau nonaktifkan setelan di UI Anda secara cerdas berdasarkan dukungan hardware real-time. Misalnya, jika pengguna mengaktifkan HDR, Anda dapat langsung mengabui dan menonaktifkan opsi 60 FPS jika kombinasi tersebut tidak didukung di perangkat tersebut.
- Menyediakan mode "Kualitas Tinggi" yang andal: Konfigurasi kamera dengan daftar prioritas fitur yang diinginkan. CameraX otomatis menemukan dan mengaktifkan kombinasi yang paling didukung untuk perangkat tertentu, sehingga memastikan hasil yang bagus tanpa logika yang rumit dan spesifik per perangkat.
- Mencegah kegagalan sesi kamera: Dengan memverifikasi dukungan sebelumnya, Anda mencegah kamera mencoba mengonfigurasi kombinasi yang tidak didukung, sehingga menghilangkan sumber umum error dan menawarkan pengalaman pengguna yang lancar.
Cara Kerjanya: Komponen Inti
API baru ini berpusat pada penambahan utama pada SessionConfig dan CameraInfo.
- GroupableFeature: API ini memperkenalkan serangkaian fitur yang dapat dikelompokkan yang telah ditentukan sebelumnya, seperti HDR_HLG10, FPS_60, PREVIEW_STABILIZATION, dan IMAGE_ULTRA_HDR. Karena batasan komputasi, hanya serangkaian fitur tertentu yang dapat dikelompokkan dengan tingkat keandalan tinggi yang disediakan API ini. Kami sedang berupaya aktif untuk memperluas daftar ini dan akan memperkenalkan dukungan untuk lebih banyak fitur dalam rilis mendatang.
- Parameter SessionConfig Baru: Class ini, yang digunakan untuk memulai sesi kamera, kini menerima dua parameter baru:
requiredFeatureGroup: Gunakan ini untuk fitur yang harus didukung agar konfigurasi berhasil - ideal untuk fitur yang diaktifkan secara eksplisit oleh pengguna, seperti mengalihkan tombol 'HDR'. Untuk memastikan pengalaman yang deterministik dan konsisten, panggilanbindToLifecycleakan menampilkanIllegalArgumentExceptionjika kombinasi yang diminta tidak didukung, bukan mengabaikan permintaan fitur secara diam-diam. APICameraInfo#isFeatureGroupSupported(detail di bawah) harus digunakan untuk mengkueri hasil ini sebelumnya.preferredFeatureGroup: Gunakan ini untuk fitur yang diinginkan tetapi opsional, misalnya saat Anda ingin menerapkan mode "Kualitas Tinggi" default. Anda memberikan daftar fitur yang diinginkan yang diurutkan berdasarkan prioritas Anda, dan CameraX akan otomatis mengaktifkan kombinasi prioritas tertinggi yang didukung perangkat.
- CameraInfo#isFeatureGroupSupported(): Ini adalah metode kueri inti untuk memeriksa secara eksplisit apakah grup fitur didukung, sangat cocok untuk menyediakan hanya opsi fitur yang didukung kepada pengguna di UI aplikasi Anda. Anda meneruskan
SessionConfig, dan fungsi ini akan menampilkan boolean yang menunjukkan apakah kombinasi tersebut didukung. Jika Anda ingin mengikatSessionConfigdengan fitur yang diperlukan, Anda harus menggunakan API ini terlebih dahulu untuk memastikan API tersebut didukung.
Penerapan dalam Praktik
Mari kita lihat cara menggunakan komponen ini untuk menciptakan pengalaman kamera yang lebih baik.
Skenario 1: Mode Kualitas Tinggi "Upaya Terbaik"
Jika ingin mengaktifkan fitur terbaik secara default, Anda dapat memberikan daftar yang diprioritaskan ke preferredFeatureGroup. Dalam contoh ini, kita memberi tahu CameraX untuk memprioritaskan HDR, lalu 60 FPS, dan terakhir Stabilisasi Pratinjau. CameraX menangani kompleksitas pemeriksaan semua kemungkinan kombinasi dan memilih yang terbaik yang didukung perangkat.
Misalnya, jika perangkat dapat menangani HDR dan 60 FPS secara bersamaan, tetapi tidak dengan Stabilisasi Pratinjau, CameraX akan mengaktifkan dua yang pertama dan membuang yang ketiga. Dengan begitu, Anda mendapatkan pengalaman terbaik tanpa menulis pemeriksaan kompleks khusus perangkat.
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) } } )
Untuk cuplikan kode ini, CameraX akan mencoba mengaktifkan kombinasi fitur dalam urutan prioritas berikut, dengan memilih yang pertama yang didukung sepenuhnya oleh perangkat:
- HDR + 60 FPS + Stabilisasi Pratinjau
- HDR + 60 FPS
- HDR + Stabilisasi Pratinjau
- HDR
- 60 FPS + Stabilisasi Pratinjau
- 60 FPS
- Stabilisasi Pratinjau
- Tidak satu pun fitur di atas
Skenario 2: Membangun UI Reaktif
Untuk membuat UI yang merespons pilihan pengguna dan mencegah pengguna memilih kombinasi fitur yang tidak didukung, Anda dapat membuat kueri untuk dukungan secara langsung. Fungsi di bawah memeriksa fitur mana yang tidak kompatibel dengan pilihan saat ini pengguna, sehingga Anda dapat menonaktifkan elemen UI yang sesuai.
/** * 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 }
Kemudian, Anda dapat menghubungkan logika ini ke ViewModel atau pengontrol UI untuk bereaksi terhadap input pengguna dan mengikat ulang kamera dengan konfigurasi yang dijamin berfungsi.
// 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, ) ) }
Untuk melihat konsep ini dalam aplikasi yang berfungsi, Anda dapat menjelajahi aplikasi pengujian internal kami. Aplikasi ini menyediakan penerapan lengkap dari skenario "upaya terbaik" dan "UI reaktif" yang dibahas di atas.
Perhatikan: Ini adalah aplikasi pengujian dan bukan contoh yang didukung secara resmi. Meskipun merupakan referensi yang bagus untuk Feature Group API, dokumen ini belum disempurnakan untuk penggunaan produksi.
Mulai Sekarang Juga
Feature Group API menghilangkan ambiguitas saat menggunakan kemampuan kamera tingkat lanjut. Dengan menyediakan cara deterministik untuk membuat kueri dukungan fitur, Anda dapat membuat aplikasi kamera yang lebih canggih dan andal dengan percaya diri.
API ini tersedia sebagai eksperimental di CameraX 1.5 dan dijadwalkan menjadi sepenuhnya stabil dalam rilis 1.6, dengan dukungan dan peningkatan lainnya dalam proses.
Untuk mempelajari lebih lanjut, lihat dokumentasi resmi. Kami tidak sabar ingin melihat karya Anda dan menantikan masukan Anda. Sampaikan pendapat Anda dan laporkan masalah melalui saluran berikut:
Lanjutkan membaca
-
Berita Produk
Setiap developer memiliki alur kerja dan kebutuhan AI yang unik, dan penting untuk dapat memilih cara AI membantu pengembangan Anda. Pada bulan Januari, kami memperkenalkan kemampuan untuk memilih model AI lokal atau jarak jauh guna mendukung fungsi AI di Android Studio
Matthew Warner • Waktu baca: 2 menit
-
Berita Produk
Android Studio Panda 3 kini stabil dan siap digunakan dalam produksi. Rilis ini memberi Anda lebih banyak kontrol dan penyesuaian atas alur kerja yang didukung AI, sehingga mempermudah pembuatan aplikasi Android berkualitas tinggi.
Matt Dyor • Waktu baca 3 menit
-
Berita Produk
Di Google, kami berkomitmen untuk menghadirkan model AI tercanggih langsung ke perangkat Android di saku Anda. Hari ini, dengan senang hati kami mengumumkan rilis model terbuka canggih terbaru kami: Gemma 4.
Caren Chang, David Chou • Waktu baca 3 menit
Terus dapatkan informasi
Dapatkan insight pengembangan Android terbaru yang dikirim ke kotak masuk Anda setiap minggu.