الكاميرا في التطوير المحمول: ما هي، أنواع API وكيفية الاستخدام

المؤلف: IT Sectr نُشر: 2026-03-22 وقت القراءة: 8 دق

الكاميرا في التطبيقات المحمولة هي وحدة أجهزة في الجهاز يمكن للمطور الوصول إليها عبر APIs النظام لالتقاط الصور والفيديو. وفقاً لـ Google Android Developers (2025)، يتم استخدام CameraX في أكثر من 85% من تطبيقات Android التي تتطلب وظائف الكاميرا. يوفر كل من AVFoundation على iOS وCameraX على Android واجهات عالية المستوى تخفي تعقيد إدارة الأجهزة.

النقاط الرئيسية

  • تتم إدارة الكاميرا في التطبيقات المحمولة عبر APIs النظام: CameraX وCamera2 على Android، AVFoundation على iOS.
  • CameraX هي مكتبة Jetpack حديثة مع دورة حياة مدمجة، تدعم 95% من أجهزة Android.
  • AVFoundation هو إطار عمل iOS لالتقاط الفيديو والصور مع إعدادات Exposure وISO وFocus.
  • الأذونات للوصول إلى الكاميرا إلزامية على كلا المنصتين ويتم طلبها عبر حوارات النظام.
  • يعتمد أداء الكاميرا على إمكانيات أجهزة الجهاز وإصدار نظام التشغيل.

ما هي الكاميرا في التطبيقات المحمولة

الكاميرا المحمولة هي وحدة بصرية مدمجة تتكون من عدسة ومستشعر صور ومعالج إشارات الصور (ISP). يصل المطور إلى الكاميرا من خلال نظام التشغيل باستخدام أطر عمل متخصصة. على Android، هذه هي Camera2 API (مستوى منخفض) وCameraX (مستوى عالٍ، مبني على Camera2)، وعلى iOS — AVFoundation وUIKit للسيناريوهات البسيطة. توفر كل منصة مجموعتها الخاصة من الأدوات، لكن المفهوم العام هو نفسه: يقوم التطبيق بتهيئة جلسة التقاط، ويضبط المعلمات (الدقة، التركيز، التعريض)، ويستقبل تياراً من الإطارات أو الصور الفردية.

إمكانيات أجهزة الكاميرات الحديثة

تدعم الكاميرات المحمولة الحديثة العديد من أوضاع التصوير: HDR، الوضع الليلي، الوضع الشخصي مع طمس الخلفية، الفيديو البطيء والتسجيل بتنسيق RAW. لدى المطور إمكانية الوصول إلى إعدادات برمجية: ISO (حساسية المستشعر)، سرعة الغالق (التعريض)، توازن اللون الأبيض، التركيز (تلقائي ويدوي) وتثبيت الصورة. يمكن أن تحتوي الأجهزة الرائدة على ما يصل إلى 4 كاميرات بأطوال بؤرية مختلفة، ويمكن للتطبيق اختيار كاميرا محددة حسب المعرف.

أنواع APIs للعمل مع الكاميرا

توفر المنصات المحمولة العديد من APIs للعمل مع الكاميرا، تختلف في مستوى التجريد والوظائف. يعتمد اختيار API معينة على متطلبات المشروع: لالتقاط الصور البسيط، يكفي CameraX أو UIImagePickerController؛ للتطبيقات الاحترافية، هناك حاجة إلى Camera2 أو AVFoundation مع التحكم المباشر في المستشعر. فيما يلي مقارنة بين APIs الرئيسية.

APIالمنصةالمستوىالميزات
CameraXAndroidعالٍيدرك دورة الحياة، 95% من الأجهزة
Camera2Androidمنخفضتحكم كامل، RAW، تصوير متتابع
AVFoundationiOSمتوسطتحكم كامل في الالتقاط
UIKit (UIImagePickerController)iOSعالٍواجهة مستخدم جاهزة، بدون تخصيص

متى تختار CameraX

CameraX هو الخيار الأمثل لمعظم تطبيقات Android التي تحتاج إلى كاميرا بدون تخصيص عميق. تتعامل المكتبة تلقائياً مع دورة حياة Activity وFragment، وتدعم الأذونات وتضمن التوافق عبر إصدارات Android المختلفة. تضمن CameraX سلوكاً متناسقاً على 95% من أجهزة Android بفضل طبقة التوافق الخاصة بها. إذا كنت بحاجة إلى معاينة الكاميرا (Preview) أو التقاط الصور (ImageCapture) أو تحليل الإطارات (ImageAnalysis) — تتعامل CameraX مع جميع السيناريوهات الثلاثة دون كتابة كود معقد.

متى تختار Camera2

Camera2 هي API منخفضة المستوى للسيناريوهات الاحترافية: التسجيل بتنسيق RAW، الضبط اليدوي للتعريض، التصوير المتتابع والتحكم المتزامن في كاميرات متعددة. تتطلب Camera2 من المطور فهماً عميقاً لخط أنابيب التقاط الصور وإدارة StateMachine ومعالجة callbacks. استخدم Camera2 فقط إذا كانت CameraX لا تغطي المتطلبات: على سبيل المثال، تطبيقات مسح المستندات مع التركيز اليدوي أو الكاميرات المخصصة بدقة غير قياسية.

طلب أذونات الكاميرا

يتطلب الوصول إلى الكاميرا إذناً صريحاً من المستخدم على كلتا المنصتين. على Android، تتم إضافة إذن CAMERA إلى البيان (manifest)، واعتباراً من Android 6.0، يجب أيضاً طلب الإذن في وقت التشغيل عبر ActivityCompat.requestPermissions. على iOS، تتم إضافة مفتاح NSCameraUsageDescription إلى Info.plist مع وصف لسبب استخدام الكاميرا. بدون هذا الوصف، سيتعطل التطبيق عند محاولة الوصول إلى الكاميرا. اعتباراً من iOS 14، يعرض حوار الأذونات ليس فقط اسم التطبيق ولكن أيضاً السبب المحدد — يجب أن تكون الصياغة واضحة للمستخدم.

التنفيذ على Android باستخدام CameraX

CameraX يبسط العمل مع الكاميرا إلى بضعة أسطر من الكود فقط. لبدء المعاينة، تحتاج إلى إنشاء مثيل Preview وربطه بـ LifecycleOwner والحصول على SurfaceProvider للعرض. لالتقاط الصور، يُستخدم ImageCapture مع هدف حفظ. فيما يلي مثال كامل لتشغيل الكاميرا والتقاط صورة باستخدام CameraX بلغة Kotlin.

إعداد Preview وImageCapture

kotlin
val preview = Preview.Builder()
    .build()
    .also {
        it.surfaceProvider = viewFinder.surfaceProvider
    }

val imageCapture = ImageCapture.Builder()
    .setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
    .build()

val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
cameraProviderFuture.addListener(Runnable {
    val cameraProvider = cameraProviderFuture.get()
    val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA

    try {
        cameraProvider.unbindAll()
        cameraProvider.bindToLifecycle(
            this, cameraSelector, preview, imageCapture
        )
    } catch (e: Exception) {
        Log.e("CameraX", "فشل الربط", e)
    }
}, ContextCompact.getMainExecutor(this))

تربط طريقة bindToLifecycle الكاميرا بدورة حياة Activity — عند تدوير الشاشة أو انتقال التطبيق إلى الخلفية، يتم تحرير الكاميرا تلقائياً. يختار CameraSelector.DEFAULT_BACK_CAMERA الكاميرا الخلفية؛ للكاميرا الأمامية، يُستخدم DEFAULT_FRONT_CAMERA. بعد الربط، يبدأ Preview في عرض تغذية الكاميرا في PreviewView، ويرى المستخدم صورة الكاميرا على الشاشة.

التقاط صورة

kotlin
val photoFile = File(
    externalMediaDirs.firstOrNull(),
    "IMG_${System.currentTimeMillis()}.jpg"
)
val outputOptions = ImageCapture.OutputFileOptions
    .Builder(photoFile)
    .build()

imageCapture.takePicture(
    outputOptions,
    ContextCompact.getMainExecutor(this),
    object : ImageCapture.OnImageSavedCallback {
        override fun onImageSaved(output: ImageCapture.OutputFileResults) {
            Log.d("CameraX", "Photo saved: ${photoFile.absolutePath}")
        }
        override fun onError(exception: ImageCaptureException) {
            Log.e("CameraX", "خطأ في الالتقاط", exception)
        }
    }
)

تلتقط طريقة takePicture إطاراً من الكاميرا وتحفظه في ملف. يدعم OutputFileOptions الكتابة إلى File وContentResolver وMediaStore. في回调 onImageSaved، يتلقى التطبيق إشعاراً بالحفظ الناجح ويمكنه تحديث واجهة المستخدم. يضمن CAPTURE_MODE_MINIMIZE_LATENCY أقصى سرعة للغالق عن طريق تقليل المعالجة اللاحقة.

التنفيذ على iOS باستخدام AVFoundation

على iOS، يتم توفير الوصول إلى الكاميرا بواسطة إطار عمل AVFoundation عبر فئة AVCaptureSession. يقوم المطور بإنشاء جلسة التقاط، ويضيف المدخلات اللازمة (AVCaptureDeviceInput) والمخرجات (AVCapturePhotoOutput, AVCaptureVideoDataOutput)، ويبدأ الجلسة. يُستخدم AVCaptureVideoPreviewLayer لعرض المعاينة. فيما يلي مثال على إعداد جلسة لالتقاط الصور بلغة Swift.

swift
import AVFoundation

let captureSession = AVCaptureSession()
captureSession.sessionPreset = .photo

guard let camera = AVCaptureDevice.default(
    for: .video
) else { return }

guard let input = try? AVCaptureDeviceInput(device: camera)
else { return }

let output = AVCapturePhotoOutput()
captureSession.addInput(input)
captureSession.addOutput(output)

DispatchQueue.global(qos: .userInitiated).async {
    captureSession.startRunning()
}

AVCaptureSessionPreset.photo يضبط الدقة المثلى للصور (عادة 12 ميجابكسل على الأجهزة الحديثة). المدخل هو AVCaptureDeviceInput تم إنشاؤه لكاميرا الجهاز. بعد إضافة المدخل والمخرج، تبدأ الجلسة في خيط خلفي عبر startRunning — قد يستغرق بدء الجلسة حتى 200 مللي ثانية على الأجهزة القديمة. لالتقاط صورة، يتم استدعاء capturePhoto(with:delegate:)، ويتم إرجاع النتيجة عبر AVCapturePhotoCaptureDelegate.

الميزات والقيود

عند العمل مع الكاميرا على الأجهزة المحمولة، يجب مراعاة قيود الأجهزة: سخونة الجهاز أثناء التسجيل المطول، استنزاف البطارية عند العمل بدقة عالية وجودة كاميرا متفاوتة عبر الأجهزة المختلفة. على Android، يؤدي تجزئة النظام البيئي إلى أن نفس تكوين CameraX قد يعمل بشكل مختلف على نماذج مختلفة. على iOS، تتعلق القيود بشكل أساسي بالترخيص: استخدام الكاميرا في الخلفية يتطلب إذناً خاصاً من Apple. من المهم أيضاً تذكر أن المحاكيات لا تملك إمكانية الوصول إلى كاميرا حقيقية — الاختبار ممكن فقط على جهاز فعلي.

التوافق مع إصدارات نظام التشغيل المختلفة

CameraX يحل مشكلة تجزئة Android من خلال طبقة التوافق CameraXConfig — تطبق المكتبة تلقائياً حلولاً بديلة للأخطاء المعروفة من المصنعين. على iOS، يعمل AVFoundation بشكل موحد على جميع الأجهزة بدءاً من iOS 6، لكن بعض الميزات (مثل الوضع الشخصي أو LiDAR) متاحة فقط على iPhone 12 والإصدارات الأحدث. عند تطوير تطبيق عبر المنصات، يُنصح باستخدام Flutter أو React Native مع إضافات الكاميرا — فهي تجرد الاختلافات بين المنصات وتوفر API موحدة لكلا نظامي التشغيل.

الأسئلة الشائعة

ما هي API الكاميرا الأفضل لاختيارها على Android؟

معظم التطبيقات، يُنصح باستخدام CameraX لسهولة الاستخدام ومعالجة دورة الحياة المدمجة والتوافق مع 95% من الأجهزة. يجب اختيار Camera2 فقط عند الحاجة إلى RAW أو التصوير المتتابع أو التحكم اليدوي في المستشعر.

كيفية طلب إذن الوصول إلى الكاميرا؟

على Android، أضف إذن CAMERA إلى البيان واطلبه في وقت التشغيل عبر ActivityCompat.requestPermissions. على iOS، أضف NSCameraUsageDescription إلى Info.plist مع شرح واضح لسبب استخدام الكاميرا.

هل يمكن استخدام الكاميرا في الخلفية؟

على iOS، استخدام الكاميرا في الخلفية محدود بشدة — يتطلب إذناً خاصاً من Apple. على Android، يمكن للكاميرا العمل في الخلفية من خلال خدمة أمامية، لكن هذا يؤثر سلباً على عمر البطارية وسخونة الجهاز.

لماذا لا تعمل الكاميرا على المحاكي؟

محاكيات iOS ومحاكيات Android لا تملك إمكانية الوصول إلى كاميرا أجهزة — فهي لا تحاكي مستشعراً مادياً. لاختبار وظائف الكاميرا، استخدم دائماً جهازاً فعلياً أو كاميرا خارجية متصلة بالكمبيوتر.

ما هو CameraX ImageAnalysis؟

ImageAnalysis هو محلل تيار إطارات من CameraX يمرر كل إطار إلى ImageAnalysis.Analyzer للمعالجة. يُستخدم للتعرف على رموز QR واكتشاف الوجوه ومسح المستندات ومهام الرؤية الحاسوبية الأخرى.

الخلاصة

  • تتم إدارة الكاميرا في التطبيقات المحمولة عبر CameraX/Camera2 (Android) وAVFoundation (iOS).
  • CameraX هي مكتبة Jetpack عالية المستوى مع دعم دورة الحياة وتوافق مع 95% من أجهزة Android.
  • AVFoundation يوفر AVCaptureSession للتحكم المرن في التقاط الصور والفيديو على iOS.
  • الأذونات إلزامية على كلتا المنصتين — CAMERA على Android، NSCameraUsageDescription على iOS.
  • Camera2 هي API منخفضة المستوى للسيناريوهات الاحترافية: RAW، إعدادات يدوية، تصوير متتابع.
  • القيود — سخونة الجهاز، تجزئة Android، عدم وجود محاكاة للكاميرا في المحاكيات.
  • التوصية — ابدأ مع CameraX على Android وAVFoundation على iOS، وانتقل إلى Camera2 فقط عند الضرورة.

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا