بالنسبة إلى الأجهزة التي تعمل بالإصدار 15 من نظام التشغيل Android أو الإصدارات الأحدث، يمكنك تنفيذ عملية اختيار النطاق بين خدمة 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 لا يتيح استخدام التطبيقات التي تتضمّن عمليات تنفيذ قابلة للتنزيل من جهات خارجية، يجب أن يكون تطبيق اختيار النطاق تطبيقًا تابعًا للنظام وموجودًا في المجلد /system_ext/priv-app/ أو /product/priv-app/.DomainSelectionService يتحقّق إطار العمل مما إذا كان اسم حزمة التنفيذ يتطابق مع قيمة التراكب على الجهاز للتأكّد من ربط التطبيقات الموثوق بها والمثبَّتة مسبقًا فقط.
توفير واجهات 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.