במכשירים עם Android מגרסה 15 ואילך, אפשר להטמיע בחירה של דומיין בין שירות IMS ושירותים מדור קודם ברשתות מיתוג מעגלים באמצעות DomainSelectionService API של המערכת. DomainSelectionService
הוא ממשק מוגדר היטב בין פלטפורמת Android לבין הטמעה של בחירת דומיין שסופקה על ידי ספק. הממשק הזה מאפשר להטמעה של הספק לספק לפלטפורמה מידע על איתות, כמו הדומיין שבו מתבצעות שיחות יוצאות והודעות SMS, והעדפה של סוג הרשת בסריקת הרשת.
איור 1. תרשים הארכיטקטורה של התכונה לבחירת דומיין
דוגמאות ומקור
Android מספקת הטמעה לדוגמה של התכונה לבחירת דומיין בפרויקט הקוד הפתוח של Android (AOSP) בכתובת TelephonyDomainSelectionService.
מידע מפורט על DomainSelectionService API זמין במאמר DomainSelectionService ובמאמרים על שאר המחלקות ב-API.
הטמעה
כדי להטמיע את תכונת בחירת הדומיין במכשיר עם Android, צריך לבצע את השלבים הבאים:
יוצרים אפליקציה לבחירת דומיין. השירות צריך להיות מוגדר בקובץ
AndroidManifest.xml.מוסיפים הגדרה לשכבת העל של המכשיר כדי לאפשר לפלטפורמה לבצע קישור להטמעה של
DomainSelectionService.תמיכה בממשקי שכבת הפשטת החומרה (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, מוסיפים את ההגדרה הבאה לשכבת העל של המכשיר:
-
config_domain_selection_service_component_name: שם הרכיב (מחרוזתComponentNameשטוחה) בשירותDomainSelectionService.
מכיוון שמערכת Android לא תומכת באפליקציות עם הטמעות של צד שלישי שאפשר להוריד, DomainSelectionService אפליקציית בחירת הדומיין צריכה להיות אפליקציית מערכת שנמצאת בתיקייה /system_ext/priv-app/ או /product/priv-app/. המסגרת בודקת אם שם החבילה של ההטמעה תואם לערך השכבה העליונה במכשיר, כדי לוודא שרק אפליקציות מהימנות שהותקנו מראש מקושרות.
תמיכה בממשקי HAL של רדיו
כדי להפעיל את התכונה של בחירת דומיין, צריך לתמוך בממשקי HAL של רדיו שנדרשים:
-
void setEmergencyMode(int serial, EmergencyMode emcModeType); void triggerEmergencyNetworkScan(int serial, EmergencyNetworkScanTrigger request); void cancelEmergencyNetworkScan(int serial, boolean resetScan); void exitEmergencyMode(int serial); -
void emergencyNetworkScanResult(RadioIndicationType type, EmergencyRegResult result);
אימות
כדי לבדוק שמסגרת הטלפוניה מגיבה בצורה תקינה לממשק DomainSelectionService, מריצים את הבדיקות של חבילת בדיקות התאימות (CTS) ב-DomainSelectionServiceTestOnMockModem.