שירות לבחירת דומיין

במכשירים עם Android מגרסה 15 ואילך, אפשר להטמיע בחירה של דומיין בין שירות IMS ושירותים מדור קודם ברשתות מיתוג מעגלים באמצעות DomainSelectionService API של המערכת. DomainSelectionService הוא ממשק מוגדר היטב בין פלטפורמת Android לבין הטמעה של בחירת דומיין שסופקה על ידי ספק. הממשק הזה מאפשר להטמעה של הספק לספק לפלטפורמה מידע על איתות, כמו הדומיין שבו מתבצעות שיחות יוצאות והודעות SMS, והעדפה של סוג הרשת בסריקת הרשת.

domain-selection-architecture

איור 1. תרשים הארכיטקטורה של התכונה לבחירת דומיין

דוגמאות ומקור

‫Android מספקת הטמעה לדוגמה של התכונה לבחירת דומיין ב-AOSP בכתובת TelephonyDomainSelectionService. למידע מפורט על DomainSelectionService API, אפשר לעיין במאמר DomainSelectionService ובשיעורים האחרים ב-API.

הטמעה

כדי להטמיע את התכונה 'בחירת דומיין' במכשיר 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.