خدمة اختيار النطاق

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

مخطّط بنية خدمة اختيار النطاق يوضّح تفاعلها مع نظام التشغيل Android وعمليات التنفيذ الخاصة بالمورّدين

الشكل 1. مخطّط البنية لميزة اختيار النطاق

أمثلة ومصدر

يوفّر نظام التشغيل Android تنفيذًا مرجعيًا لميزة اختيار النطاق في "مشروع Android المفتوح المصدر" ‏ (AOSP) على TelephonyDomainSelectionService. للحصول على مستندات مفصّلة حول واجهة برمجة التطبيقات DomainSelectionService، يُرجى الاطّلاع على DomainSelectionService والفئات الأخرى في واجهة برمجة التطبيقات.

التنفيذ

لتفعيل ميزة اختيار النطاق على جهاز يعمل بنظام التشغيل Android، يجب اتّباع الخطوات التالية:

  1. أنشئ تطبيقًا لاختيار النطاق. يجب تحديد الخدمة في ملف AndroidManifest.xml.

  2. أضِف إعدادًا إلى تراكب الجهاز للسماح للمنصة بالربط بتنفيذ DomainSelectionService.

  3. توفير واجهات طبقة تجريد الأجهزة اللاسلكية (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 بشكل آمن، أضِف الإعداد التالي إلى تراكب الجهاز:

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

توفير واجهات HAL اللاسلكية

لتفعيل ميزة اختيار النطاق، يجب توفير واجهات HAL المطلوبة التالية الخاصة بجهاز الراديو:

  • IRadioNetwork

    void setEmergencyMode(int serial, EmergencyMode emcModeType);
    void triggerEmergencyNetworkScan(int serial,
            EmergencyNetworkScanTrigger request);
    void cancelEmergencyNetworkScan(int serial, boolean resetScan);
    void exitEmergencyMode(int serial);
    
  • IRadioNetworkIndication

    void emergencyNetworkScanResult(RadioIndicationType type,
            EmergencyRegResult result);
    

التحقُّق

لاختبار استجابة إطار عمل الاتصال الهاتفي بشكل سليم لواجهة DomainSelectionService، شغِّل اختبارات مجموعة أدوات اختبار التوافق (CTS) في DomainSelectionServiceTestOnMockModem.