واجهة برمجة تطبيقات إضافات CameraX

توفّر CameraX واجهة برمجة تطبيقات Extensions API للوصول إلى الإضافات التي نفّذتها الشركات المصنّعة للأجهزة على أجهزة Android المختلفة. للاطّلاع على قائمة بأوضاع الإضافات المتوافقة، يُرجى مراجعة إضافات الكاميرا.

للاطّلاع على قائمة بالأجهزة المتوافقة مع الإضافات، يُرجى مراجعة الأجهزة المتوافقة.

بنية الإضافات

توضّح الصورة التالية بنية إضافات الكاميرا.

الشكل 1: بنية إضافات الكاميرا

يمكن لتطبيق CameraX استخدام الإضافات من خلال واجهة برمجة التطبيقات CameraX Extensions API. تدير واجهة برمجة التطبيقات CameraX Extensions API طلبات البحث عن الإضافات المتاحة، وضبط جلسة الكاميرا للإضافة، والتواصل مع مكتبة المصنّع الأصلي للجهاز الخاصة بإضافات الكاميرا. يتيح ذلك لتطبيقك استخدام ميزات مثل "الوضع الليلي" أو "النطاق العالي الديناميكية" أو "الوضع التلقائي" أو "الخلفية الضبابية" أو "تجميل الوجه".

تفعيل إضافة لالتقاط الصور ومعاينتها

قبل استخدام واجهة برمجة التطبيقات الخاصة بالإضافات، يمكنك استرداد مثيل ExtensionsManager باستخدام طريقة ExtensionsManager#getInstanceAsync(Context, CameraProvider). سيسمح لك ذلك بالاستعلام عن معلومات توفّر الإضافة. بعد ذلك، يمكنك استرداد CameraSelector تم تفعيل الإضافة فيه. سيتم تطبيق وضع الإضافة على حالات استخدام التقاط الصور ومعاينتها عند استدعاء طريقة bindToLifecycle()‎ مع تفعيل إضافة CameraSelector.

لتنفيذ الإضافة لحالات استخدام التقاط الصور ومعاينتها، يُرجى الرجوع إلى عينة تعليمات برمجية التالية:

// import androidx.camera.extensions.ExtensionMode
// import androidx.camera.extensions.ExtensionsManager

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    val lifecycleOwner = this

    val cameraProviderFuture = ProcessCameraProvider.getInstance(applicationContext)
    cameraProviderFuture.addListener({
        // Obtain an instance of a process camera provider.
        // The camera provider provides access to the set of cameras associated with the device.
        // The camera obtained from the provider will be bound to the activity lifecycle.
        val cameraProvider = cameraProviderFuture.get()

        val extensionsManagerFuture =
            ExtensionsManager.getInstanceAsync(applicationContext, cameraProvider)
        extensionsManagerFuture.addListener({
            // Obtain an instance of the extensions manager.
            // The extensions manager enables a camera to use extension capabilities available on
            // the device.
            val extensionsManager = extensionsManagerFuture.get()

            // Select the camera.
            val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA

            // Query if extension is available.
            // Not all devices will support extensions or might only support a subset of
            // extensions.
            if (extensionsManager.isExtensionAvailable(cameraSelector, ExtensionMode.NIGHT)) {
                // Unbind all use cases before enabling different extension modes.
                try {
                    cameraProvider.unbindAll()

                    // Retrieve a night extension enabled camera selector.
                    val nightCameraSelector =
                        extensionsManager.getExtensionEnabledCameraSelector(
                            cameraSelector,
                            ExtensionMode.NIGHT
                        )

                    // Bind image capture and preview use cases with the extension enabled camera
                    // selector.
                    val imageCapture = ImageCapture.Builder().build()
                    val preview = Preview.Builder().build()
                    // Connect the preview to receive the surface the camera outputs the frames
                    // to. This will allow displaying the camera frames in either a TextureView
                    // or SurfaceView. The SurfaceProvider can be obtained from the PreviewView.
                    preview.setSurfaceProvider(surfaceProvider)

                    // Returns an instance of the camera bound to the lifecycle.
                    // Use this camera object to control various operations with the camera.
                    // Example: flash, zoom, focus metering etc.
                    val camera = cameraProvider.bindToLifecycle(
                        lifecycleOwner,
                        nightCameraSelector,
                        imageCapture,
                        preview
                    )
                } catch (e: Exception) {
                    Log.e(TAG, "Use case binding failed", e)
                }
            }
        }, ContextCompat.getMainExecutor(this))
    }, ContextCompat.getMainExecutor(this))
}

إيقاف الإضافة

لإيقاف إضافات المورّدين، عليك إلغاء ربط جميع حالات الاستخدام وإعادة ربط حالات استخدام التقاط الصور والمعاينة باستخدام أداة اختيار الكاميرا العادية. على سبيل المثال، يمكنك إعادة الربط بالكاميرا الخلفية باستخدام CameraSelector.DEFAULT_BACK_CAMERA.

الطلبات التابعة

يتم تنفيذ واجهة برمجة التطبيقات CameraX Extensions API في مكتبة camera-extensions. تعتمد الإضافات على وحدات CameraX الأساسية (core وcamera2 وlifecycle).

أنيق

dependencies {
  def camerax_version = "1.2.0-rc01"
  implementation "androidx.camera:camera-core:${camerax_version}"
  implementation "androidx.camera:camera-camera2:${camerax_version}"
  implementation "androidx.camera:camera-lifecycle:${camerax_version}"
  //the CameraX Extensions library
  implementation "androidx.camera:camera-extensions:${camerax_version}"
    ...
}

Kotlin

dependencies {
  val camerax_version = "1.2.0-rc01"
  implementation("androidx.camera:camera-core:${camerax_version}")
  implementation("androidx.camera:camera-camera2:${camerax_version}")
  implementation("androidx.camera:camera-lifecycle:${camerax_version}")
  // the CameraX Extensions library
  implementation("androidx.camera:camera-extensions:${camerax_version}")
    ...
}

إزالة واجهة برمجة التطبيقات القديمة

بعد طرح واجهة برمجة التطبيقات الجديدة Extensions API في الإصدار 1.0.0-alpha26، تم إيقاف واجهة برمجة التطبيقات القديمة Extensions API التي تم طرحها في أغسطس 2019. اعتبارًا من الإصدار 1.0.0-alpha28، تمت إزالة واجهة برمجة التطبيقات القديمة للإضافات من المكتبة. على التطبيقات التي تستخدم واجهة برمجة التطبيقات الجديدة Extensions API الحصول الآن على CameraSelector متوافقة مع الإضافات واستخدامها لربط حالات الاستخدام.

على التطبيقات التي تستخدم واجهة برمجة التطبيقات Extensions API القديمة نقل بياناتها إلى واجهة برمجة التطبيقات Extensions API الجديدة لضمان توافقها مع إصدارات CameraX القادمة.

مراجع إضافية

لمزيد من المعلومات حول CameraX، يُرجى الاطّلاع على المراجع الإضافية التالية.

درس تطبيقي حول الترميز

  • بدء استخدام CameraX
  • عيّنة تعليمات برمجية

    نموذج تطبيق لإضافات CameraX

    مراجع أخرى

    إضافات المورّدين في CameraX

    أداة التحقّق من إضافات المورّدين في CameraX