שירות לבחירת דומיינים

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

ארכיטקטורת בחירת-דומיין

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

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

ב-Android יש הטמעה לדוגמה של תכונת בחירת הדומיין ב-AOSP בכתובת TelephonyDomainSelectionService. למידע מפורט על ה-API של DomainSelectionService, ראו 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": מאפשרת לשירות להתגלות ולהופעל על ידי טלפוניה לפני שהמשתמש מבטל את נעילת המכשיר. השירות לא יכול לגשת לאחסון המאובטח באמצעות הצפנת המכשיר לפני שהמשתמש מבטל את הנעילה של המכשיר. מידע נוסף זמין במאמרים תמיכה במצב Direct Boot והצפנה מבוססת-קובץ.

  • persistent="true": מאפשר לשירות לפעול באופן עקבי ולא להרוג אותו כדי לשחזר זיכרון. המאפיין הזה פועל רק אם האפליקציה נוצרה כאפליקציית מערכת.

  • permission="android.permission.BIND_DOMAIN_SELECTION_SERVICE": מוודא שרק תהליך שקיבלה את ההרשאה BIND_DOMAIN_SELECTION_SERVICE יכול לקשר לאפליקציה. כך אפשר למנוע מאפליקציה זדונית לקשר לשירות, כי רק אפליקציות מערכת יכולות לקבל את ההרשאה מהמסגרת.

השירות צריך לציין גם את האלמנט intent-filter עם הפעולה android.telephony.DomainSelectionService. כך ל-framework יש אפשרות למצוא את השירות 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.