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

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

דיאגרמת ארכיטקטורה של שירות בחירת הדומיין שמציגה את האינטראקציה שלו עם פלטפורמת Android ועם הטמעות של ספקים

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

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

‫Android מספקת הטמעה לדוגמה של התכונה לבחירת דומיין ב-פרויקט קוד פתוח של 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 של רדיו

כדי להפעיל את התכונה של בחירת דומיין, צריך לתמוך בממשקי radio 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.