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

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

domain-selection-architecture

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

أمثلة ومصدر

يوفر نظام التشغيل 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.