במכשירים עם Android מגרסה 15 ואילך, אפשר להטמיע בחירה של דומיין בין שירות IMS לשירותים מדור קודם ברשתות עם מיתוג מעגלים באמצעות ממשק ה-API של המערכת DomainSelectionService
. DomainSelectionService
הוא ממשק מוגדר היטב בין פלטפורמת Android לבין הטמעה של בחירת דומיין שספק מסוים מספק. הממשק הזה מאפשר להטמעה של הספק לספק לפלטפורמה מידע על אותות, כמו הדומיין שאליו מתבצעות שיחות יוצאות והודעות SMS וההעדפה לסוג הרשת בסריקת הרשת.
איור 1. תרשים ארכיטקטורה של התכונה לבחירת דומיין
דוגמאות ומקור
ב-Android יש הטמעה לדוגמה של תכונת בחירת הדומיין ב-AOSP בכתובת TelephonyDomainSelectionService
. למידע מפורט על ה-API של DomainSelectionService
, ראו 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"
: מאפשרת לשירות להתגלות ולהופעל על ידי טלפוניה לפני שהמשתמש מבטל את נעילת המכשיר. השירות לא יכול לגשת לאחסון המאובטח באמצעות הצפנת המכשיר לפני שהמשתמש מבטל את הנעילה של המכשיר. מידע נוסף זמין במאמרים תמיכה במצב Direct Boot והצפנה מבוססת-קובץ.persistent="true"
: מאפשר לשירות לפעול באופן עקבי ולא להרוג אותו כדי לשחזר זיכרון. המאפיין הזה פועל רק אם האפליקציה נוצרה כאפליקציית מערכת.permission="android.permission.BIND_DOMAIN_SELECTION_SERVICE"
: מוודא שרק תהליך שקיבלה את ההרשאהBIND_DOMAIN_SELECTION_SERVICE
יכול לקשר לאפליקציה. כך אפשר למנוע מאפליקציה זדונית לקשר לשירות, כי רק אפליקציות מערכת יכולות לקבל את ההרשאה מהמסגרת.
השירות צריך לציין גם את האלמנט intent-filter
עם הפעולה android.telephony.DomainSelectionService
. כך ל-framework יש אפשרות למצוא את השירות 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
.