بالنسبة إلى الأجهزة التي تعمل بنظام التشغيل Android 15 أو إصدار أحدث، يمكنك
تنفيذ ميزة اختيار النطاق
بين خدمة IMS والخدمات القديمة عبر شبكات تبديل الدوائر باستخدام
واجهة برمجة التطبيقات DomainSelectionService التابعة لنظام التشغيل. DomainSelectionService هي واجهة محدّدة جيدًا بين نظام Android الأساسي وتنفيذ ميزة اختيار النطاق التي يوفّرها البائع. تتيح هذه الواجهة تنفيذ البائع توفير معلومات الإشارة إلى المنصة، مثل النطاق الذي يتم فيه إجراء المكالمات الصادرة وإرسال الرسائل القصيرة، وإعدادات المفضّلة لنوع الشبكة في عملية فحص الشبكة.
الشكل 1: مخطط بنية ميزة اختيار النطاق
الأمثلة والمصدر
يوفّر Android تنفيذًا مرجعيًا لميزة اختيار النطاق في
"مشروع Android مفتوح المصدر" (AOSP) ضمن TelephonyDomainSelectionService.
للاطّلاع على مستندات مفصّلة حول واجهة برمجة التطبيقات DomainSelectionService، يُرجى الرجوع إلى
DomainSelectionService والفئات الأخرى في واجهة برمجة التطبيقات.
التنفيذ
لتنفيذ ميزة اختيار النطاق على جهاز يعمل بنظام التشغيل Android، يجب اتّباع الخطوات التالية:
إنشاء تطبيق لاختيار النطاق: يجب تحديد الخدمة في ملف
AndroidManifest.xml.إضافة إعدادات إلى تراكب الجهاز للسماح للمنصة بالربط بتنفيذ
DomainSelectionService.توفير واجهات طبقة تجريد الأجهزة (HAL) المطلوبة للراديو من أجل ميزة اختيار النطاق.
يقدّم هذا القسم مزيدًا من التفاصيل حول هذه الخطوات.
إضافة إدخال الخدمة في ملف AndroidManifest.xml
لكي يسجِّل تطبيق اختيار النطاق خدمة DomainSelectionService في إطار العمل، أضِف إدخال خدمة في ملف البيان باستخدام التنسيق التالي:
<service
android:name="com.example.domainselection.DomainSelectionService"
android:directBootAware="true"
android:persistent="true"
…
android:permission="android.permission.BIND_DOMAIN_SELECTION_SERVICE"
…
<intent-filter>
<action android:name="android.telephony.DomainSelectionService"/>
</intent-filter>
…
</service>
يجب أن يحدّد تعريف الخدمة في AndroidManifest.xml السمات التالية لكي تعمل ميزة اختيار النطاق:
directBootAware="true": يتيح اكتشاف الخدمة وتشغيلها من قِبل خدمة الاتصال الهاتفي قبل أن يفتح المستخدم قفل الجهاز. لا يمكن للخدمة الوصول إلى وحدة التخزين المشفّرة على مستوى الجهاز قبل أن يفتح المستخدم قفل الجهاز. لمزيد من المعلومات، يُرجى الاطّلاع على مقالتَي دعم وضع "التشغيل المباشر" و التشفير المستند إلى الملفات.persistent="true": يتيح تشغيل الخدمة بشكل مستمر وعدم إيقافها من قِبل النظام لاستعادة الذاكرة. لا تعمل هذه السمة إلا إذا تم إنشاء التطبيق كتطبيق نظام.permission="android.permission.BIND_DOMAIN_SELECTION_SERVICE": يتحقّق من أنّه لا يمكن ربط التطبيق إلا بعملية تم منحها إذنBIND_DOMAIN_SELECTION_SERVICE. ويمنع ذلك تطبيقًا غير مرغوب فيه من الربط بـ الخدمة، لأنّه لا يمكن للإطار منح الإذن إلا لتطبيقات النظام.
يجب أن تحدّد الخدمة أيضًا عنصر intent-filter مع الإجراء android.telephony.DomainSelectionService. يتيح ذلك للإطار العثور على خدمة DomainSelectionService.
تحديد الإعدادات في تراكب الجهاز
لكي تتمكّن المنصة من الربط بشكل آمن بخدمة DomainSelectionService، أضِف الإعدادات التالية إلى تراكب الجهاز:
config_domain_selection_service_component_name: اسم المكوّن (سلسلةComponentNameمسطّحة) لخدمةDomainSelectionService.
بما أنّ Android لا يتيح استخدام التطبيقات التي تتضمّن عمليات تنفيذ DomainSelectionService قابلة للتنزيل تابعة لجهات خارجية، يجب أن يكون تطبيق اختيار النطاق تطبيق نظام موجودًا في المجلد /system_ext/priv-app/ أو /product/priv-app/. يتحقّق إطار العمل مما إذا كان اسم حزمة عملية التنفيذ يطابق قيمة تراكب الجهاز للتحقّق من أنّه يتم ربط التطبيقات الموثوق بها والمثبّتة مسبقًا فقط.
توفير واجهات طبقة تجريد الأجهزة (HAL) للراديو
لتفعيل ميزة اختيار النطاق، يجب توفير واجهات طبقة تجريد الأجهزة (HAL) المطلوبة للراديو التالية:
-
void setEmergencyMode(int serial, EmergencyMode emcModeType); void triggerEmergencyNetworkScan(int serial, EmergencyNetworkScanTrigger request); void cancelEmergencyNetworkScan(int serial, boolean resetScan); void exitEmergencyMode(int serial); -
void emergencyNetworkScanResult(RadioIndicationType type, EmergencyRegResult result);
التحقق من صحة البيانات
لاختبار استجابة إطار عمل الاتصال الهاتفي بشكل صحيح لواجهة
DomainSelectionService، شغِّل اختبارات "مجموعة أدوات اختبار التوافق" (CTS)
في DomainSelectionServiceTestOnMockModem.