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