במכשירים עם Android מגרסה 15 ואילך, אפשר להטמיע בחירה של דומיין בין שירות IMS ושירותים מדור קודם ברשתות מיתוג מעגלים באמצעות DomainSelectionService
API של המערכת. DomainSelectionService
הוא ממשק מוגדר היטב בין פלטפורמת Android לבין הטמעה של בחירת דומיין שסופקה על ידי ספק. הממשק הזה מאפשר להטמעה של הספק לספק לפלטפורמה מידע על איתות, כמו הדומיין שבו מתבצעות שיחות יוצאות והודעות SMS, והעדפה של סוג הרשת בסריקת הרשת.
איור 1. תרשים הארכיטקטורה של התכונה לבחירת דומיין
דוגמאות ומקור
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
.