Not: Bu sayfa, Camera2 paketiyle ilgilidir. Uygulamanız Camera2'den belirli, alt düzey özellikler gerektirmiyorsa CameraX'i kullanmanızı öneririz. Hem CameraX hem de Camera2, Android 5.0 (API düzeyi 21) ve sonraki sürümleri destekler.
Camera2, cihaz üreticilerinin çeşitli Android cihazlarda uyguladığı uzantılara erişmek için bir Extensions API sağlar. Desteklenen uzantı modlarının listesi için Kamera uzantıları başlıklı makaleyi inceleyin.
Uzantıları destekleyen cihazların listesi için Desteklenen cihazlar başlıklı makaleyi inceleyin.
Uzantı mimarisi
Aşağıdaki resimde kamera uzantıları mimarisi gösterilmektedir.
Camera2 uygulaması, Camera2 API aracılığıyla uzantıları kullanabilir. Camera2 API, mevcut uzantıları sorgulama, uzantı kamera oturumu yapılandırma ve Camera Extensions OEM kitaplığıyla iletişim kurma yöntemleri sunar. Bu sayede uygulamanız Gece, HDR, Otomatik, Bokeh veya Yüz Rötuşu gibi uzantıları kullanabilir.
Kamera cihazını Camera2 Extensions API uyumluluğu açısından test etme
Aşağıdaki kod snippet'i, cihazın Camera2 Extensions API'yi destekleyip desteklemediğini kontrol eder. Uzantılar tüm cihazlar tarafından desteklenmez veya cihaz, uzantıların bir alt kümesini destekleyebilir. Snippet, kamera uzantılarını destekleyen uyumlu kamera kimliklerinin listesini döndürür.
private fun getExtensionCameraIds(cameraManager: CameraManager): List<String> = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { cameraManager.cameraIdList.filter { cameraId -> val characteristics = cameraManager.getCameraCharacteristics(cameraId) val extensionCharacteristics = cameraManager.getCameraExtensionCharacteristics(cameraId) val capabilities = characteristics.get(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES) extensionCharacteristics.supportedExtensions.isNotEmpty() && capabilities?.contains( CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE ) ?: false } } else emptyList()
Camera2 Extensions API ile CameraExtensionSession oluşturma
Camera2 Extensions API, uyumlu cihazlarla kullanıldığında belirli kamera uzantılarına erişmenizi sağlar. Aşağıdaki kod snippet'inde, mevcut bir Camera2 uygulaması için gece çekim modunu kullanmak üzere nasıl CameraExtensionSession oluşturulacağı gösterilmektedir.
private val captureCallbacks = object : CameraExtensionSession.ExtensionCaptureCallback() { // Implement Capture Callbacks. } private val extensionSessionStateCallback = object : CameraExtensionSession.StateCallback() { override fun onConfigured(session: CameraExtensionSession) { cameraExtensionSession = session try { val captureRequest = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW).apply { addTarget(previewSurface) }.build() session.setRepeatingRequest( captureRequest, Dispatchers.IO.asExecutor(), captureCallbacks ) } catch (e: CameraAccessException) { Snackbar.make( previewView, "Failed to preview capture request", Snackbar.LENGTH_SHORT ).show() requireActivity().finish() } } override fun onClosed(session: CameraExtensionSession) { super.onClosed(session) cameraDevice.close() } override fun onConfigureFailed(session: CameraExtensionSession) { Snackbar.make( previewView, "Failed to start camera extension preview", Snackbar.LENGTH_SHORT ).show() requireActivity().finish() } } private fun startExtensionSession() { val outputConfig = arrayListOf( OutputConfiguration(stillImageReader.surface), OutputConfiguration(previewSurface) ) val extensionConfiguration = ExtensionSessionConfiguration( CameraExtensionCharacteristics.EXTENSION_NIGHT, outputConfig, Dispatchers.IO.asExecutor(), extensionSessionStateCallback ) cameraDevice.createExtensionSession(extensionConfiguration) }
Ek kaynaklar
Daha fazla bilgi için CameraExtensionCharacteristics sayfasını ziyaret edin ve herkese açık Camera2 Extensions API örneklerini inceleyin.