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

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

domain-selection-architecture

איור 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. כך המסגרת תוכל למצוא את השירות 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.