تتميز تطبيقات الكاميرا الحديثة بميزات قوية ومتداخلة. يتوقع المستخدمون تسجيل الفيديو بتقنية HDR مذهلة، والتقاط حركة سلسة بمعدل 60 إطارًا في الثانية، والحصول على لقطات سلسة للغاية باستخدام ميزة تثبيت المعاينة — غالبًا في نفس الوقت.
كمطورين، نعلم أن الواقع أكثر تعقيدًا. كيف يمكنك ضمان أن جهازًا معينًا يدعم بالفعل مجموعة معينة؟ حتى الآن، كان تمكين ميزات متعددة في كثير من الأحيان مقامرة. يمكنك التحقق من دعم الميزات الفردية، ولكن دمجها قد يؤدي إلى سلوك غير محدد، أو ما هو أسوأ من ذلك، فشل جلسة الكاميرا. تجبر حالة عدم اليقين هذه المطورين على أن يكونوا محافظين، مما يمنع مستخدمي الأجهزة القادرة على الوصول إلى أفضل تجربة ممكنة.
على سبيل المثال، عدد قليل جدًا من الأجهزة المتميزة تدعم بشكل موثوق فيديو HDR و60 إطارًا في الثانية في وقت واحد. وبالتالي، تتجنب معظم التطبيقات تمكين كليهما في وقت واحد لمنع تجربة المستخدم السيئة على غالبية الهواتف.
لمعالجة هذا، نحن نقدم مجموعة الميزات في CameraX – واجهة برمجة تطبيقات جديدة مصممة للقضاء على هذا التخمين. يمكنك الآن الاستعلام عما إذا كانت مجموعة معينة من الميزات مدعومة أم لا قبل تكوين الكاميرا، أو ببساطة أخبر CameraX بأولوياتك واسمح له بتمكين أفضل مجموعة مدعومة لك.
لأولئك الجدد على CameraX
قبل أن نتعمق في واجهة برمجة تطبيقات مجموعة الميزات الجديدة، دعنا نلخص سريعًا ما هو CameraX. CameraX عبارة عن مكتبة دعم Jetpack، تم تصميمها لمساعدتك في تسهيل تطوير تطبيقات الكاميرا. فهو يوفر واجهة برمجة تطبيقات متسقة وسهلة الاستخدام تعمل عبر معظم أجهزة Android، مع توافق مع الإصدارات السابقة لنظام Android 6.0 (مستوى واجهة برمجة التطبيقات 23). إذا كنت مستخدمًا جديدًا لـ CameraX، فنوصيك بالاطلاع على الوثائق الرسمية ومحاولة com.codelab للبدء.
ما يمكنك إنشاؤه باستخدام واجهة برمجة تطبيقات مجموعة الميزات
لم تعد بحاجة إلى المقامرة على مجموعات الميزات ويمكنك بكل ثقة تقديم أفضل تجارب الكاميرا الممكنة – مثل HDR المتزامن وفيديو بمعدل 60 إطارًا في الثانية على أجهزة قادرة (مثل Pixel 10 Pro) – مع تجنب الأخطاء بأمان على الأجهزة التي لا يمكنها دعم المجموعة.
باستخدام واجهة برمجة تطبيقات مجموعة الميزات، يمكنك:
-
إنشاء واجهات مستخدم أكثر ذكاءً وديناميكية: قم بتمكين الإعدادات أو تعطيلها بذكاء في واجهة المستخدم الخاصة بك بناءً على دعم الأجهزة في الوقت الفعلي. على سبيل المثال، إذا قام المستخدم بتمكين تقنية HDR، فيمكنك على الفور تعطيل خيار 60 إطارًا في الثانية وتعطيله إذا لم تكن المجموعة مدعومة على هذا الجهاز.
-
تقديم وضع “عالي الجودة” يمكن الاعتماد عليه: قم بتكوين الكاميرا بقائمة أولويات الميزات المرغوبة. يقوم CameraX تلقائيًا بالعثور على أفضل مجموعة مدعومة وتمكينها لأي جهاز معين، مما يضمن الحصول على نتيجة رائعة بدون منطق معقد خاص بالجهاز.
-
منع فشل جلسة الكاميرا: من خلال التحقق من الدعم مسبقًا، فإنك تمنع الكاميرا من محاولة تكوين مجموعة غير مدعومة، مما يؤدي إلى القضاء على مصدر شائع للأعطال وتقديم تجربة مستخدم سلسة.
كيف يعمل: المكونات الأساسية
تتمحور واجهة برمجة التطبيقات الجديدة حول الإضافات الرئيسية إلى تكوين الجلسة و معلومات الكاميرا.
-
ميزة قابلة للتجميع: تقدم واجهة برمجة التطبيقات هذه مجموعة من الميزات القابلة للتجميع المحددة مسبقًا، مثل HDR_HLG10, FPS_60, PREVIEW_STABILIZATION، و IMAGE_ULTRA_HDR. نظرًا للقيود الحسابية، لا يمكن تجميع سوى مجموعة محددة من الميزات بدرجة عالية من الموثوقية التي توفرها واجهة برمجة التطبيقات هذه. نحن نعمل بنشاط على توسيع هذه القائمة وسنقدم الدعم لمزيد من الميزات في الإصدارات المستقبلية.
جديد تكوين الجلسة حدود: هذه الفئة، المستخدمة لبدء جلسة الكاميرا، تقبل الآن معلمتين جديدتين:
-
مطلوب ميزة المجموعة: استخدم هذا للميزات التي يجب تكون مدعومة لنجاح التكوين – مثالية للميزات التي يقوم المستخدم بتمكينها بشكل صريح، مثل تبديل مفتاح “HDR”. لضمان تجربة حتمية ومتسقة، و bindToLifecycle سيتم رمي المكالمة IllegalArgumentException إذا كانت المجموعة المطلوبة غير مدعومة، بدلاً من تجاهل طلب الميزة بصمت. ال CameraInfo#isFeatureGroupSupported يجب استخدام واجهة برمجة التطبيقات (التفاصيل أدناه) للاستعلام عن هذه النتيجة مسبقًا.
-
PreferredFeatureGroup: استخدم هذا للميزات المرغوبة ولكنها اختيارية، على سبيل المثال، عندما تريد تنفيذ وضع “الجودة العالية” الافتراضي. يقم بتقديم قائمة بالميزات التي تريدها أمرت وفقا لأولوياتك، ويقوم CameraX تلقائيًا بتمكين المجموعة ذات الأولوية العليا التي يدعمها الجهاز.
-
CameraInfo#isFeatureGroupSupported(): هذه هي طريقة الاستعلام الأساسية للتحقق بشكل صريح مما إذا كانت مجموعة الميزات مدعومة، وهي مناسبة تمامًا لتوفير خيارات الميزات المدعومة فقط للمستخدمين في واجهة مستخدم التطبيق الخاص بك. قمت بتمريرها أ تكوين الجلسة، وتقوم بإرجاع قيمة منطقية تشير إلى ما إذا كانت المجموعة مدعومة أم لا. إذا كنت تنوي ربط أ تكوين الجلسة مع الميزات المطلوبة، يجب عليك استخدام واجهة برمجة التطبيقات هذه أولاً للتأكد من دعمها.
التنفيذ في الممارسة العملية
دعونا نلقي نظرة على كيفية استخدام هذه المكونات لبناء تجربة أفضل للكاميرا.
السيناريو 1: وضع “أفضل جهد” عالي الجودة
إذا كنت تريد تمكين أفضل الميزات الممكنة افتراضيًا، فيمكنك تقديم قائمة أولويات لها PreferredFeatureGroup. في هذا المثال، نطلب من CameraX إعطاء الأولوية لتقنية HDR، ثم 60 إطارًا في الثانية، وأخيرًا معاينة التثبيت. يتعامل CameraX مع تعقيد التحقق من جميع المجموعات الممكنة واختيار أفضل مجموعة يدعمها الجهاز.
على سبيل المثال، إذا كان الجهاز قادرًا على التعامل مع HDR و60 إطارًا في الثانية معًا ولكن ليس مع تثبيت المعاينة، فسيقوم CameraX بتمكين الأولين ويتجاهل الثالث. بهذه الطريقة، يمكنك الحصول على أفضل تجربة ممكنة دون كتابة فحوصات معقدة خاصة بالجهاز.
كاميراProvider.bindToLifecycle(
مالك دورة الحياة,
محدد الكاميرا,
تكوين الجلسة(
useCases = قائمة (معاينة، التقاط الفيديو)،
// ترتيب الميزات في هذه القائمة يحدد أولويتها.
// سيعمل CameraX على تمكين أفضل مجموعة مدعومة بناءً على ذلك
// الأولويات: HDR_HLG10 > FPS_60 > تثبيت المعاينة.
PreferredFeatureGroup =
قائمة (HDR_HLG10، FPS_60، PREVIEW_STABILIZATION)،
).يتقدم {
// (اختياري) احصل على رد اتصال بالميزات الممكّنة
// لتحديث واجهة المستخدم الخاصة بك.
setFeatureSelectionListener { الميزات المحددة ->
تحديثUiIndicators (الميزات المحددة)
}
}
)
بالنسبة لمقتطف الرمز هذا، سيحاول CameraX تمكين مجموعات الميزات بترتيب الأولوية التالي، مع تحديد أول مجموعة يدعمها الجهاز بالكامل:
-
HDR + 60 إطارًا في الثانية + تثبيت المعاينة
-
HDR + 60 إطارًا في الثانية
-
HDR + تثبيت المعاينة
-
تقرير التنمية البشرية
-
60 إطارًا في الثانية + تثبيت المعاينة
-
60 إطارًا في الثانية
-
معاينة الاستقرار
-
لا شيء من الميزات المذكورة أعلاه
السيناريو 2: إنشاء واجهة مستخدم تفاعلية
لإنشاء واجهة مستخدم تستجيب لاختيارات المستخدم وتمنع المستخدمين من تحديد مجموعة ميزات غير مدعومة، يمكنك الاستعلام عن الدعم مباشرةً. تتحقق الوظيفة أدناه من الميزات غير المتوافقة مع ميزات المستخدم حاضِر التحديدات، مما يسمح لك بتعطيل عناصر واجهة المستخدم المقابلة.
/**
* إرجاع قائمة بالميزات غير المدعومة مجتمعة
* مع الميزات المحددة حاليا.
*/
هزار ميزات غير مدعومة(
الميزات الحالية: اضبط
): اضبط
فال ميزات غير مدعومة = mutableSetOf
فال appFeatureOptions = مجموعة (HDR_HLG10، فبس_60، PREVIEW_STABILIZATION)
// كرر كل خيار ميزة متاح في تطبيقك.
appFeatureOptions.forEach { featureOption ->
// تخطي الميزات التي حددها المستخدم بالفعل.
لو (currentFeatures.contains(featureOption)) يعود@forEach
// تحقق من دعم إضافة هذه الميزة الجديدة.
فال مدعوم = CameraInfo.isFeatureGroupSupported (
تكوين الجلسة(
useCases = حالات الاستخدام,
// تحقق من الميزة الجديدة فوق الميزات الموجودة.
مطلوب ميزة المجموعة = الميزات الحالية + featureOption
)
)
لو (! مدعوم) {
unsupportedFeatures.add(featureOption)
}
}
يعود ميزات غير مدعومة
}
يمكنك بعد ذلك توصيل هذا المنطق بجهازك ViewModel أو وحدة تحكم واجهة المستخدم للتفاعل مع مدخلات المستخدم وإعادة ربط الكاميرا بتكوين مضمون للعمل.
// يتم استدعاؤه عندما يقوم المستخدم بتشغيل/إيقاف بعض الميزات.
هزار onFeatureChange(currentFeatures: Set
// تحديد الميزات غير المدعومة مع التحديد الحالي.
فال unsupportedFeatures = getUnsupportedFeatures(selectedFeatures)
// قم بتحديث واجهة مستخدم التطبيق بحيث لا يتمكن المستخدمون من تمكينها.
updateDisabledFeatures(ميزات غير مدعومة)
// ربط تكوين الجلسة بمجموعة الميزات الجديدة. منذ المستخدمين
// يُسمح دائمًا بتحديد الميزات المدعومة فقط، ولا حاجة إلى ذلك بشكل صريح
// تحقق مما إذا كانت مجموعة الميزات مدعومة.
كاميراProvider.bindToLifecycle(
مالك دورة الحياة,
محدد الكاميرا,
تكوين الجلسة(
useCases = قائمة (معاينة، التقاط الفيديو)،
مطلوب ميزة المجموعة = الميزات الحالية،
).يتقدم {
setFeatureSelectionListener { الميزات المحددة ->
// تحديث واجهة المستخدم للسماح للمستخدمين بمعرفة الميزات المحددة الآن
تحديثUiIndicators (الميزات المحددة)
}
}
)
}
لرؤية هذه المفاهيم في تطبيق عملي، يمكنك الاستكشاف تطبيق الاختبار الداخلي لدينا. فهو يوفر تنفيذًا كاملاً لسيناريوهي “أفضل جهد” و”واجهة المستخدم التفاعلية” التي تمت مناقشتها أعلاه.
يرجى ملاحظة: هذا تطبيق اختباري وليس عينة مدعومة رسميًا. على الرغم من أنه مرجع رائع لواجهة برمجة تطبيقات مجموعة الميزات، إلا أنه لم يتم تحسينه لاستخدامه في الإنتاج.
ابدأ اليوم
تزيل واجهة برمجة تطبيقات مجموعة الميزات الغموض الذي يكتنف العمل باستخدام إمكانيات الكاميرا المتقدمة. من خلال توفير طريقة حتمية للاستعلام عن دعم الميزات، يمكنك إنشاء تطبيقات كاميرا أكثر قوة وموثوقية بثقة.
تتوفر واجهة برمجة التطبيقات كنسخة تجريبية في CameraX 1.5 ومن المقرر أن تصبح مستقرة تمامًا في الإصدار 1.6، مع المزيد من الدعم والتحسينات في الطريق.
لمعرفة المزيد، راجع الوثائق الرسمية. لا يمكننا الانتظار لرؤية ما تقوم بإنشائه، ونتطلع إلى تلقي تعليقاتك. يرجى مشاركة أفكارك والإبلاغ عن أي مشاكل من خلال القنوات التالية:

