מערכת Android 9 כוללת ממשק SystemApi חדש בשם ImsService כדי לעזור לך להטמיע מערכת משנה מולטימדיה (IMS) של IP. ImsService API הוא בין פלטפורמת Android לבין ספק, הטמעת IMS שסופקה על ידי הספק.
איור 1. סקירה כללית של ImsService
באמצעות ממשק ImsService, מטמיע ה-IMS יכול לספק אותות מידע לפלטפורמה, כמו פרטי הרשמה ל-IMS, הודעות SMS בשילוב של IMS ושילוב תכונות MmTel כדי לספק קול ווידאו בשיחת טלפון. גם ה-imsService API הוא ממשק Android System API, כלומר הוא יכול להיות שמבוסס על ה-SDK של Android ישירות ולא על המקור. IMS שהותקנה מראש במכשיר אפשר גם להגדיר אותה להיות מעודכנים בחנות Play.
דוגמאות ומקור
מערכת Android מספקת אפליקציה ב-AOSP שמטמיעה חלקים ממשק API של ImsService למטרות בדיקה ופיתוח. אפשר למצוא אפליקציה ב- /testapps/ImsTestService.
המסמכים של ImsService API זמינים בכתובת ImsService ובמחלקות האחרות ב-API.
הטמעה
ImsService API הוא API ברמה גבוהה שמאפשר להטמיע IMS בדרכים רבות, בהתאם לחומרה הזמינה. לדוגמה, ההטמעה משתנה בהתאם להטמעה מלאה של ה-IMS באפליקציה או אם הוא עומס חלקי או מלא במודם. ב-Android לא מספק HAL ציבורי לצורך העברה למעבד פס הבסיס, כך שכל הסרת הנתונים צריכה להתבצע באמצעות תוסף ה-HAL למודם.
תאימות להטמעות IMS ישנות יותר
Android 9 כולל את ImsService API,
מכשירים שבהם נעשה שימוש בהטמעה ישנה יותר של IMS לא יכולים לתמוך ב-API.
במכשירים האלה, ממשקי AIDL ומחלקות wrapper הישנים הועברו
למרחב השמות android.telephony.ims.compat
. כשמשדרגים ל-Android
9, מכשירים ישנים יותר צריכים לבצע את הפעולות הבאות כדי להמשיך
את התמיכה של ה-API הישן יותר.
- משנים את מרחב השמות של הטמעת ImsService כך:
android.telephony.ims.compat
API של מרחב השמות. - יש לשנות את הגדרת שירות ImsService בקובץ AndroidManifest.xml כדי להשתמש
פעולת סינון לפי Intent אחת (
android.telephony.ims.compat.ImsService
), במקום את הפעולהandroid.telephony.ims.ImsService
.
לאחר מכן, ה-framework יהיה מקושר ל-IMsService באמצעות שכבת התאימות
שסופקו ב-Android 9 כדי לעבוד עם הגרסה הקודמת
הטמעת ImsService
.
רישום ImsService ב-framework
ImsService API מוטמע כשירות, שמסגרת Android
מקושר אל כדי לתקשר עם הטמעת ה-IMS. שלושה שלבים
לצורך רישום אפליקציה שבה מיושמת ImsService באמצעות
. ראשית, הטמעת ImsService חייבת לרשום את עצמה באמצעות
פלטפורמה שמשתמשת בAndroidManifest.xml
של האפליקציה; שני, הוא צריך
להגדיר אילו תכונות IMS נתמכות בהטמעה (MmTel או RCS). והשלישי,
צריך לאמת אותו בתור הטמעת ה-IMS המהימנה אצל הספק
הגדרה אישית או שכבת-על של מכשיר.
הגדרת השירות
אפליקציית IMS רושמת ImsService באמצעות ה-framework על-ידי הוספת
הערך service
למניפסט בפורמט הבא:
<service
android:name="com.egcorp.ims.EgImsService"
android:directBootAware="true"
Android:persistent="true"
...
android:permission="android.permission.BIND_IMS_SERVICE" >
...
<intent-filter>
<action android:name="android.telephony.ims.ImsService" />
</intent-filter>
</service>
ההגדרה service
ב-AndroidManifest.xml
מגדירה את הדברים הבאים
המאפיינים הנדרשים לפעולה תקינה:
directBootAware="true"
: מאפשר לגלות את השירות ולהפעיל אותוtelephony
לפני שהמשתמש מבטל את הנעילה של המכשיר. לשירות אין גישה אחסון מוצפן במכשיר לפני שהמשתמש מבטל את נעילת המכשיר. לקבלת מידע נוסף מידע נוסף, ראה תמיכה במצב הפעלה ישירה וגם הצפנה מבוססת קבצים.persistent="true"
: מאפשר לשירות הזה לפעול באופן קבוע ולא נהרגו על ידי המערכת כדי לשחזר את הזיכרון. המאפיין הזה פועל רק אם אפליקציה שמיועדת כאפליקציית מערכת.permission="android.permission.BIND_IMS_SERVICE"
: מבטיח שרק עם הרשאהBIND_IMS_SERVICE
שהוענקה לו, יכול קישור לאפליקציה. הפעולה הזו מונעת קישור של אפליקציה בעייתית אל מאחר שרק אפליקציות מערכת יכולות לקבל את ההרשאה .
השירות צריך גם לציין את הרכיב intent-filter
עם הפעולה
android.telephony.ims.ImsService
. כך ל-framework למצוא
ImsService
מפרט תכונות IMS
לאחר הגדרת ImsService כשירות Android ב- AndroidManifest.xml, חובה להגדיר את תכונות ה-IMS שבהן הוא תומך ב-IMsService. נכון לעכשיו, מערכת Android תומכת בתכונות MmTel ו-RCS, אבל רק MmTel משולבות ב-framework. למרות שאין ממשקי API של RCS משולבים עדיין יש יתרונות להצהיר עליה כתכונה .IMsService.
אלה התכונות החוקיות שמוגדרות ב-android.telephony.ims.ImsFeature
שירות ImsService יכול לספק הסבר ודוגמאות לגבי הסיבה ל-IMS
האפליקציה תרצה להשתמש באחת מהתכונות האלה, או בכולן. אחרי כל
מוגדרת, הדף הזה מסביר איך ה-ImsService
מצהיר על קבוצת
לתכונות שהוא מגדיר לכל חריץ SIM.
FEATURE_MMTEL
ImsService
מיישם את תכונת IMS MMTEL, שמכילה תמיכה עבור
כל המדיה מסוג IMS (מפרטי IR.92 ו-IR.94), מלבד חיבור למצב חירום
IMS PDN לשיחות חירום. כל יישום של ImsService
שמעוניין
לתמיכה בתכונות ה-MMTEL.
מחלקה בסיסית android.telephony.ims.MmTelFeature
והחזרת מחלקה מותאמת אישית
הטמעת MmTelFeature
ב-
ImsService#createMmTelFeature
FEATURE_EMERGENCY_MMTEL
הצהרה על התכונה הזו מסמנת רק לפלטפורמה שבמקרה חירום מצורף אליה
אפשר להשתמש ב-IMS PDN לשירותי חירום. אם לא מוצהר על התכונה הזו עבור
ב-ImsService
, הפלטפורמה תמיד תוגדר כברירת מחדל כחלופה למתג מעגלי
לשירותי החירום. צריך להגדיר את התכונה FEATURE_MMTEL
בשביל זה
יש להגדיר.
FEATURE_RCS
ממשק ה-API של ImsService לא מיישם תכונות RCS של IMS, אלא
מחלקה בסיסית אחת (android.telephony.ims.RcsFeature
) עדיין יכולה להיות שימושית. המסגרת
קישור אוטומטי לשירות ה-IMSService וקריאות ImsService#createRcsFeature
כשהוא מזהה שהחבילה צריכה לספק RCS. אם כרטיס ה-SIM המשויך
עם הסרת שירות ה-RCS, ה-framework מתקשר אוטומטית
RcsFeature#onFeatureRemoved
ולאחר מכן ניקוי ImsService
המשויכים
באמצעות תכונת ה-RCS. הפונקציונליות הזו יכולה להסיר חלק
או לוגיקה מחייבת שתכונת RCS הייתה צריכה לספק.
רישום של תכונות נתמכות
מסגרת הטלפוניה מקשרת תחילה ל-IMsService כדי לשלוח שאילתות לגבי התכונות
שהוא תומך בשימוש ב-API ImsService#querySupportedImsFeatures
. אחרי
שמחשבת באילו תכונות ה-IMsService יתמוך, היא תקרא
ImsService#create[...]Feature
לכל תכונה ש-imsService יהיה
באחריותכם. אם התכונות שאפליקציית IMS תומכת בהן ישתנו,
יכול להשתמש בפונקציה ImsService#onUpdateSupportedImsFeatures
כדי לסמן ל-framework
כדי לחשב מחדש את התכונות הנתמכות. מידע נוסף זמין בתרשים הבא
לגבי האתחול והקישור של ה-IMsService.
איור 2: אתחול וקישור של ImsService
זיהוי ואימות של Framework של הטמעת ImsService
לאחר שה-imsService הוגדר בצורה נכונה בקובץ AndroidManifest.xml, יש להגדיר את הפלטפורמה כך שתקשר (באופן מאובטח) ל-IMsService כאשר המתאים. יש שני סוגים של ImsServices שה-framework מקושר אליהם:
- 'ביטול' של הספק ImsService: ה-IMsServices נטענים מראש
אבל הם מחוברים לספק סלולרי אחד או יותר,
מחויב כאשר מכניסים כרטיס SIM תואם. הוא מוגדר באמצעות
config_ims_mmtel_package_override_string
מפתח CarrierConfig להטמעה של תכונות MMTEL על ידי ImsServices.config_ims_rcs_package_override_string
להטמעה של תכונות RCS ב-IMsServices.
- מכשיר 'ברירת מחדל' ImsService: זהו שירות ה-IMsService שמוגדר כברירת המחדל שנטען
במכשיר על ידי ה-OEM (יצרן ציוד מקורי), וצריך להיות מתוכנן לספק שירותי IMS
בכל המצבים שבהם חברת ImsService של חברת התובלה אינה זמינה והיא שימושית במקרים
מצבים שבהם לא הוכנס למכשיר כרטיס SIM או שכרטיס ה-SIM לא הוכנס
לא מותקן בו שירות ImsService של ספק. הדבר
מוגדר בשכבת-העל של המכשיר באמצעות התצורות הבאות:
config_ims_mmtel_package
: הטמעת תכונות MMTELconfig_ims_rcs_package
: שימוש בתכונות RCS
מערכת Android לא תומכת באפליקציות עם ImsService להורדה של צד שלישי ולכן כל הטמעות ImsService שמוגדרות כאן נדרשות להיות אפליקציות מערכת והן חייבות להיות נמצאות ב-/system/priv-app/, או /product/priv-app/ folder כדי להעניק את ההרשאות המתאימות (כלומר טלפון, הרשאות למיקרופון, למיקום, למצלמה ולאנשי הקשר). על ידי אימות שם החבילה של הטמעת ה-IMS תואם ל-CarrierConfig או למכשיר ערכי שכבת-על שהוגדרו למעלה, רק אפליקציות מהימנות שהותקנו מראש עובר.
התאמה אישית
אפליקציות שמטמיעות ImsService כפופות רק למכשירים שבהם הן
מוגדרות כ"ביטול" הספק ImsService או 'ברירת המחדל' של המכשיר
הגדרות של ImsService לפונקציונליות MMTEL או RCS.
שירות ImsService גם מאפשר לתכונות IMS שבהן הוא תומך (MMTEL ו-RCS)
מופעלת או מושבתת באופן דינמי באמצעות עדכונים באמצעות
אמצעי תשלום אחד (ImsService#onUpdateSupportedImsFeatures
). הפעולה הזו מפעילה את ה-framework
תחשב מחדש אילו שירותי ImsServices כפופים ואילו תכונות הם תומכים. אם
אפליקציית IMS מעדכנת את ה-framework בלי תכונות נתמכות, ה-imsService
לא יהיו כבולים עד שהטלפון יופעל מחדש או שיוכנס כרטיס SIM חדש
תואמת לאפליקציית IMS.
עדיפות קישור עבור ריבוי ImsService
המסגרת לא יכולה לתמוך בקישור לכל שירותי ה-IMsServices האפשריים יוטמעו מראש במכשיר ויקשרו עד שתי מסגרות ImsServices לכל חריץ SIM (IMsService אחד לכל תכונה) בסדר הבא לכל תכונה:
- שם חבילת ImsService המוגדר על ידי הערך CarrierConfig
config_ims_[mmtel/rcs]_package_override_string
כשיש כרטיס SIM נוסף. - שם חבילת ImsService המוגדר בערך שכבת-העל של המכשיר עבור
config_ims_[mmtel/rcs]_package
כולל כיסוי שבו אין כרטיס SIM הכרטיס הוכנס. שירות ImsService הזה חייב לתמוך בתכונה 'MmTel במצב חירום'.
שם החבילה של ה-IMsService צריך להיות מוגדר CarrierConfig לכל אחד מהספקים שמשתמשים בחבילה הזו, או שכבת העל של המכשיר אם ה-IMsService שלך יוגדר כברירת המחדל, כפי שהוגדר למעלה.
נסביר לך פירוט של כל תכונה. למכשיר (יחיד או מרובה SIM) אם טוענים כרטיס SIM יחיד, אפשר להשתמש בשתי תכונות IMS: MMTel ו-RCS. המערכת תנסה לקשר את המסגרת לפי הסדר שהוגדר למעלה עבור כל תכונה, אם התכונה לא זמינה עבור ה-IMsService שמוגדר אצל הספק שינוי ההגדרה, ה-framework יחזור לברירת המחדל של ImsService. כך, לדוגמה, הטבלה הבאה מתארת איזו תכונת IMS שעליה מבוסס ה-framework להשתמש בשלוש אפליקציות IMS שמטמיעות מערכת ImsServices שמותקנת במערכת עם התכונות הבאות:
- ספק הודעות מסוג ImsService תומך ב-RCS
- ספק B ImsService תומך ב-RCS וב-MMTel
- OEM (יצרן ציוד מקורי) ImsService תומך ב-RCS וב-MMTel
כרטיס ה-SIM נוסף | תכונת RCS | תכונת MMTel |
---|---|---|
ספק א' | ספק א' | OEM |
ספק ב' | ספק ב' | ספק ב' |
אין כרטיס SIM | OEM | OEM |
אימות
כלים לאימות הטמעת ה-IMS עצמה לא נכללים מכיוון שה-IMS המפרטים גדולים במיוחד ומשתמשים בציוד אימות מיוחד. יכולים רק לוודא שמסגרת הטלפוניה מגיבה באופן תקין ממשק API של ImsService.
פיתוח אפליקציית IMS
כשמפתחים אפליקציית IMS שמתממשקת עם סטאק הטלפוניה של Android, מומלץ לציין שהאפליקציה תוכל להאזין למצב של מופע של ImsService שמצורף למינוי של ספק ספציפי.
כדי להאזין למצב ImsService עבור תכונות MMTEL ו-RCS או לשנות את המצב של תכונות אלה, צריך להשתמש
ה
ImsManager
כדי לקבל מופע של
ImsMmTelManager
,
ImsRcsManager
,
או ספציפי ל-IMS
ProvisioningManager
בכיתה. לאחר מכן האפליקציה יכולה להאזין למצבי שירות והקצאה ספציפיים ל-IMS
כמו:
- תכונות MMTEL או RCS מופעלות וזמינות
- עדכונים כשמצב הרישום של IMS משתנה
- סטטוס ההקצאה של תכונות IMS
- תכונות IMS שהמשתמש הפעיל
שימוש ב-imsStateCallback
למרות ש-imsService הוא שירות קשור באופן קבוע, החיוב עשוי להשתנות כשכרטיס SIM חדש או מינוי מוטמע הופכים לפעילים או כשהגדרות הספק משתנות. כי ImsService הוא לא חלק תהליך טלפוניה, יכול להיות שיהיו חריגים לא צפויים במהלך הניסיון כדי לגשת לממשקי API של IMS במקרה ש-IMSService קורס באופן בלתי נראה או אינו מחויב עקב שינוי במינוי או בהגדרות אישיות.
במכשירים עם Android מגרסה 13 ואילך, למעקב
אם מכונת ImsService של מינוי משויך
לא זמינות או לא זמינה, אפליקציה יכולה להשתמש
ImsStateCallback
בכיתה. כשמקבלים מופע של ImsMmTelManager
או ImsRcsManager
, אנחנו
מומלץ שהאפליקציה תרשום תחילה קריאה חוזרת של מצב IMS באמצעות
ImsMmTelManager#registerImsStateCallback
או
ImsRcsManager#registerImsStateCallback
.
כדי להמשיך לקבל עדכונים על שיחות חוזרות למינויים ספציפיים כאשר
שירות ImsService יהיה זמין שוב. יהיה צורך לבטל את הרישום או למחוק את הרישום הקיים של האפליקציה
קריאות חוזרות (callback) שנרשמו דרך ImsMmTelManager
, ImsRcsManager
, או
ProvisioningManager
; ולרשום קריאה חוזרת (callbacks) חדשות.
אם יש מינוי שלא תומך ב-IMS, ה-framework קורא
ImsStateCallback#onUnavailable
עם הסיבה
REASON_NO_IMS_SERVICE_CONFIGURED
המשמעות היא ש-imsService וממשקי ה-API שקשורים ל-IMS לא זמינים
במינוי.
במקרה הלא-סביר שבו תהליך הטלפוניה קורס, האפליקציה מקבלת
ImsStateCallback#onError
ולא מקבלת יותר עדכונים לגבי המכונה הרשומה של ImsStateCallback
.
כדי לשחזר את התנאי הזה, צריך לרשום מחדש את המופע של ImsStateCallback
עבור
את המינוי המשויך באמצעות שיחה
ImsMmTelManager#registerImsStateCallback
או
ImsRcsManager#registerImsStateCallback
.