Ürün Haberleri
Tek Özelliklerin Ötesinde: CameraX 1.5 ile Özellik Kombinasyonlarını Garanti Etme
Okuma süresi: 6 dakika
Modern kamera uygulamaları, güçlü ve çakışan özellikleriyle tanımlanır. Kullanıcılar, genellikle aynı anda olmak üzere, çarpıcı HDR ile video kaydetmek, 60 FPS'de akıcı hareketler yakalamak ve önizleme sabitleme ile son derece akıcı görüntüler elde etmek ister.
Geliştiriciler olarak, gerçekliğin daha karmaşık olduğunu biliyoruz. Belirli bir cihazın belirli bir kombinasyonu gerçekten desteklediğini nasıl garanti edebilirsiniz? Şimdiye kadar birden fazla özelliği etkinleştirmek genellikle riskliydi. Tek tek özelliklerin desteklenip desteklenmediğini kontrol edebilirsiniz ancak bunları birleştirmek tanımlanmamış davranışlara veya daha da kötüsü başarısız bir kamera oturumuna yol açabilir. Bu belirsizlik, geliştiricileri muhafazakar olmaya zorlar ve bu da uygun cihazlardaki kullanıcıların mümkün olan en iyi deneyime erişmesini engeller.
Örneğin, çok az sayıda premium cihaz HDR ve 60 FPS videoyu aynı anda güvenilir bir şekilde destekler. Bu nedenle, çoğu uygulama telefonların çoğunda kötü bir kullanıcı deneyimini önlemek için ikisini aynı anda etkinleştirmekten kaçınır.
Bu sorunu çözmek için CameraX'te Özellik Grubu'nu kullanıma sunuyoruz. Bu yeni API, tahmin etme ihtiyacını ortadan kaldırmak için tasarlanmıştır. Artık kamerayı yapılandırmadan önce belirli bir özellik kombinasyonunun desteklenip desteklenmediğini sorgulayabilir veya CameraX'e önceliklerinizi söyleyerek sizin için en iyi desteklenen kombinasyonu etkinleştirmesini sağlayabilirsiniz.
CameraX'i Yeni Kullanmaya Başlayanlar İçin
Yeni Feature Group API'ye geçmeden önce CameraX'in ne olduğunu kısaca hatırlayalım. CameraX, kamera uygulaması geliştirmeyi kolaylaştırmak için oluşturulmuş bir Jetpack destek kitaplığıdır. Android 6.0 (API düzeyi 23) ile geriye dönük uyumluluk sunan bu API, çoğu Android cihazda tutarlı ve kullanımı kolay bir API yüzeyi sağlar. CameraX'i yeni kullanmaya başladıysanız başlamak için resmi dokümanları incelemenizi ve codelab'i denemenizi öneririz.
Özellik Grubu API'si ile Neler Geliştirebilirsiniz?
Artık özellik kombinasyonları konusunda risk almanıza gerek yok.Kombinasyonu desteklemeyen cihazlarda hatalardan kaçınırken, uygun donanımlarda (ör. Pixel 10 Pro) eşzamanlı HDR ve 60 FPS video gibi mümkün olan en iyi kamera deneyimlerini güvenle sunabilirsiniz.
Pixel 10 Pro'da hem HDR hem de 60 FPS'nin aynı anda etkinleştirilmesi
HDR ve 60 FPS'nin aynı anda çalıştırılamadığı eski bir cihazda 60 FPS seçeneği devre dışı bırakılırken yalnızca HDR etkinleştirilir.
Feature Group API ile şunları yapabilirsiniz:
- Daha akıllı ve dinamik kullanıcı arayüzleri oluşturun: Kullanıcı arayüzünüzdeki ayarları, donanım desteğine göre gerçek zamanlı olarak akıllıca etkinleştirin veya devre dışı bırakın. Örneğin, bir kullanıcı HDR'yi etkinleştirirse bu kombinasyon cihazda desteklenmiyorsa 60 FPS seçeneğini anında devre dışı bırakabilirsiniz.
- Güvenilir bir "Yüksek Kalite" modu sunma: Kamerayı, istenen özelliklerin öncelikli listesiyle yapılandırın. CameraX, belirli bir cihaz için en iyi desteklenen kombinasyonu otomatik olarak bulup etkinleştirerek karmaşık ve cihaza özel mantık olmadan mükemmel bir sonuç elde etmenizi sağlar.
- Kamera oturumu hatalarını önleme: Desteği önceden doğrulayarak kameranın desteklenmeyen bir kombinasyonu yapılandırmaya çalışmasını önler, böylece kilitlenmelerin yaygın bir kaynağını ortadan kaldırır ve sorunsuz bir kullanıcı deneyimi sunarsınız.
İşleyiş şekli: Temel bileşenler
Yeni API, SessionConfig ve CameraInfo'ya yapılan önemli eklemeler üzerine kuruludur.
- GroupableFeature: Bu API, HDR_HLG10, FPS_60, PREVIEW_STABILIZATION ve IMAGE_ULTRA_HDR gibi önceden tanımlanmış bir grup özellik sunar. Hesaplama sınırlamaları nedeniyle, yalnızca belirli bir özellik grubu bu API'nin sağladığı yüksek güvenilirlik derecesiyle gruplandırılabilir. Bu listeyi genişletmek için aktif olarak çalışıyoruz ve gelecekteki sürümlerde daha fazla özellik için destek sunacağız.
- Yeni SessionConfig Parametreleri: Kamera oturumu başlatmak için kullanılan bu sınıf artık iki yeni parametre kabul ediyor:
requiredFeatureGroup: Yapılandırmanın başarılı olması için desteklenmesi gereken özelliklerde kullanılır. Kullanıcının açıkça etkinleştirdiği özellikler (ör. "HDR" anahtarını açma) için idealdir. Belirleyici ve tutarlı bir deneyim sağlamak içinbindToLifecycleçağrısı, istenen kombinasyon desteklenmiyorsa özellik isteğini sessizce yoksaymak yerineIllegalArgumentExceptionoluşturur. Bu sonucu önceden sorgulamak içinCameraInfo#isFeatureGroupSupportedAPI'si (ayrıntılar aşağıda) kullanılmalıdır.preferredFeatureGroup: İstenen ancak isteğe bağlı özellikler için kullanın. Örneğin, varsayılan "Yüksek Kalite" modu uygulamak istediğinizde bu özelliği kullanabilirsiniz. İstediğiniz özelliklerin önceliklerinize göre sıralanmış bir listesini sağlarsınız ve CameraX, cihazın desteklediği en yüksek öncelikli kombinasyonu otomatik olarak etkinleştirir.
- CameraInfo#isFeatureGroupSupported(): Bu, bir özellik grubunun desteklenip desteklenmediğini açıkça kontrol etmek için kullanılan temel sorgu yöntemidir. Uygulamanızın kullanıcı arayüzünde kullanıcılara yalnızca desteklenen özellik seçeneklerini sunmak için uygundur. Bu işleme bir
SessionConfigiletirsiniz ve işlem, kombinasyonun desteklenip desteklenmediğini belirten bir Boole değeri döndürür. Gerekli özelliklere sahip birSessionConfigbağlamayı planlıyorsanız desteklendiğinden emin olmak için önce bu API'yi kullanmanız gerekir.
Pratikte Uygulama
Daha iyi bir kamera deneyimi oluşturmak için bu bileşenleri nasıl kullanacağımıza bakalım.
1. senaryo: "En İyi Çaba" Yüksek Kalite Modu
Varsayılan olarak mümkün olan en iyi özellikleri etkinleştirmek istiyorsanız preferredFeatureGroup için öncelikli bir liste sağlayabilirsiniz. Bu örnekte, CameraX'e önce HDR'ye, ardından 60 FPS'ye ve son olarak da Önizleme Sabitleme'ye öncelik vermesini söylüyoruz. CameraX, olası tüm kombinasyonları kontrol etme ve cihazın desteklediği en iyi kombinasyonu seçme karmaşıklığını yönetir.
Örneğin, bir cihaz HDR ve 60 FPS'yi birlikte işleyebiliyor ancak önizleme sabitleme ile işleyemiyorsa CameraX ilk ikisini etkinleştirir ve üçüncüsünü kullanmaz. Bu sayede, karmaşık ve cihaza özel kontroller yazmadan mümkün olan en iyi deneyimi elde edersiniz.
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)
}
}
)Bu kod snippet'i için CameraX, aşağıdaki öncelik sırasına göre özellik kombinasyonlarını etkinleştirmeye çalışır ve cihazın tam olarak desteklediği ilk kombinasyonu seçer:
- HDR + 60 FPS + Önizleme Sabitleme
- HDR + 60 FPS
- HDR + Önizleme Sabitleme
- HDR
- 60 FPS + Önizleme Sabitleme
- 60 FPS
- Sabitlemeyi önizleme
- Yukarıdaki özelliklerin hiçbiri
Senaryo 2: Reaktif kullanıcı arayüzü oluşturma
Kullanıcı seçimlerine yanıt veren ve kullanıcıların desteklenmeyen özellik kombinasyonlarını seçmesini engelleyen bir kullanıcı arayüzü oluşturmak için doğrudan destek sorgusu gönderebilirsiniz. Aşağıdaki işlev, kullanıcının mevcut seçimleriyle hangi özelliklerin uyumsuz olduğunu kontrol ederek ilgili kullanıcı arayüzü öğelerini devre dışı bırakmanıza olanak tanır.
/**
* 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
}Ardından, kullanıcı girişine tepki vermek ve kamerayı kesin olarak çalışacak bir yapılandırmayla yeniden bağlamak için bu mantığı ViewModel'inize veya kullanıcı arayüzü denetleyicinize bağlayabilirsiniz.
// 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,
)
)
}Bu kavramları çalışan bir uygulamada görmek için dahili test uygulamamızı inceleyebilirsiniz. Bu uygulama, yukarıda bahsedilen hem "en iyi çaba" hem de "reaktif kullanıcı arayüzü" senaryolarının eksiksiz bir uygulamasını sunar.
Lütfen unutmayın: Bu bir test uygulamasıdır ve resmi olarak desteklenen bir örnek değildir. Özellik Grubu API'si için harika bir referans olsa da üretimde kullanıma uygun hale getirilmemiştir.
Başlangıç Adımları
Feature Group API, gelişmiş kamera özellikleriyle çalışırken ortaya çıkan belirsizliği ortadan kaldırır. Özellik desteği için sorgu oluşturmanın kesin bir yolunu sunarak daha güçlü ve güvenilir kamera uygulamalarını güvenle oluşturabilirsiniz.
API, CameraX 1.5'te deneysel olarak kullanılabilir. 1.6 sürümünde tamamen kararlı hale gelmesi planlanmaktadır. Ayrıca, daha fazla destek ve iyileştirme de yolda.
Daha fazla bilgi için resmi belgelere göz atın. Neler üreteceğinizi görmek için sabırsızlanıyoruz. Geri bildirimlerinizi bekliyoruz. Lütfen aşağıdaki kanalları kullanarak düşüncelerinizi paylaşın ve sorunları bildirin:
Okumaya devam edin
-
Ürün Haberleri
Google I/O, her yıl Android geliştirme de dahil olmak üzere ekosistemler ve ürünlerle ilgili yeni duyurular ve kaynaklar sunar. Geliştirme süreci yapay zeka ve aracı destekli araçlara doğru kayarken Android için nasıl geliştirme yapmaya karar verirseniz verin sizi daha iyi desteklemek için tekliflerimizi genişlettik.
Simona Milanovic • Okuma süresi: 2 dakika
-
Ürün Haberleri
Google I/O 2026'da, Android ekosistemindeki en son gelişmelerin, geliştirme verimliliğini en üst düzeye çıkarırken uygulamanızın kalitesini artırmanıza nasıl yardımcı olabileceğini gösterdik.
Ataul Munim • Okuma süresi: 3 dk.
-
Ürün Haberleri
Google I/O 2026'da Android'in işletim sisteminden zeka sistemine geçişini tanıttık. Ayrıca, sistemle yerel olarak akıllı deneyimler oluşturmanın ve Google'ın yapay zeka gücünü uygulamalarınıza taşımanın yollarını gösterdik.
Jingyu Shi • Okuma süresi: 2 dakika
Gelişmelerden haberdar olun
Android geliştirmeyle ilgili en son analizleri her hafta gelen kutunuza alın.