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