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

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

بنية اختيار النطاق

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

الأمثلة والمصدر

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

إتاحة واجهات 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.