אנדרואיד 9 מציגה ממשק SystemApi חדש בשם ImsService כדי לעזור לך להטמיע IP Multimedia Subsystem (IMS). ה-API של ImsService הוא ממשק מוגדר היטב בין פלטפורמת אנדרואיד למימוש IMS שסופק על ידי ספק או ספק.
איור 1. סקירה כללית של ImsService
על ידי שימוש בממשק ImsService, מיישם IMS יכול לספק מידע איתות חשוב לפלטפורמה, כגון פרטי רישום IMS, אינטגרציה של SMS על פני IMS ושילוב תכונות MmTel כדי לספק שיחות קוליות ווידאו. ממשק ה-API של ImsService הוא גם API של מערכת אנדרואיד, כלומר ניתן לבנות אותו ישירות מול ה-SDK של Android במקום מול המקור. ניתן גם להגדיר יישום IMS שהותקן מראש במכשיר כך שיהיה ניתן לעדכון בחנות Play.
דוגמאות ומקור
אנדרואיד מספקת אפליקציה ב-AOSP המיישמת חלקים של ImsService API למטרות בדיקה ופיתוח. אתה יכול למצוא את האפליקציה ב- /testapps/ImsTestService .
אתה יכול למצוא את התיעוד של ImsService API ב- ImsService ובשאר המחלקות ב-API.
יישום
ה-API של ImsService הוא ממשק API ברמה גבוהה המאפשר ליישם IMS בדרכים רבות, בהתאם לחומרה הזמינה. לדוגמה, ההטמעה משתנה בהתאם לשאלה אם מימוש ה-IMS נמצא במלואו במעבד היישומים או אם הוא מורחק חלקית או מלאה למודם. אנדרואיד לא מספקת HAL ציבורי להורדה למעבד הבסיס, ולכן כל פריקה חייבת להתרחש באמצעות תוסף HAL שלך למודם.
תאימות עם יישומי IMS ישנים יותר
למרות ש-Android 9 כולל את ImsService API, מכשירים המשתמשים ביישום ישן יותר עבור IMS אינם מסוגלים לתמוך ב-API. עבור מכשירים אלה, ממשקי ה-AIDL ושיעורי העטיפה הישנים יותר הועברו למרחב השמות android.telephony.ims.compat
. בעת שדרוג לאנדרואיד 9, מכשירים ישנים יותר חייבים לבצע את הפעולות הבאות כדי להמשיך בתמיכה ב-API הישן יותר.
- שנה את מרחב השמות של הטמעת ImsService כך שתתרחב מממשק ה-API של
android.telephony.ims.compat
. - שנה את הגדרת שירות ImsService ב-AndroidManifest.xml כדי להשתמש בפעולת סינון הכוונות
android.telephony.ims.compat.ImsService
, במקום בפעולתandroid.telephony.ims.ImsService
.
לאחר מכן, המסגרת תיקשר ל-ImsService באמצעות שכבת התאימות שסופקה באנדרואיד 9 כדי לעבוד עם הטמעת ImsService
מדור קודם.
רישום ImsService עם המסגרת
ה-API של ImsService מיושם כשירות, שמסגרת האנדרואיד מתחברת אליו כדי לתקשר עם הטמעת IMS. יש צורך בשלושה שלבים כדי לרשום אפליקציה המיישמת ImsService עם המסגרת. ראשית, ההטמעה של ImsService חייבת לרשום את עצמה בפלטפורמה באמצעות AndroidManifest.xml
של האפליקציה; שנית, עליו להגדיר באילו תכונות IMS תומך היישום (MmTel או RCS); ושלישית, יש לאמת אותו כיישום ה-IMS המהימן בתצורת הספק או בשכבת-העל של המכשיר.
הגדרת שירות
יישום IMS רושם ImsService עם המסגרת על ידי הוספת ערך 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
. זה מאפשר למסגרת למצוא את ImsService
.
מפרט תכונת IMS
לאחר שה-ImsService הוגדר כשירות אנדרואיד ב-AndroidManifest.xml, על ImsService להגדיר באילו תכונות IMS הוא תומך. אנדרואיד תומך כרגע בתכונות MmTel ו-RCS, אולם רק MmTel משולבת במסגרת. למרות שאין ממשקי 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
שלך, הפלטפורמה תמיד תקבע כברירת מחדל ל-Circuit Switch Fallback עבור שירותי חירום. יש להגדיר את התכונה FEATURE_MMTEL
כדי שתכונה זו תוגדר.
FEATURE_RCS
ממשק ה-API של ImsService אינו מיישם תכונות IMS RCS, אך מחלקת הבסיס android.telephony.ims.RcsFeature
עדיין יכולה להיות שימושית. המסגרת נקשרת אוטומטית ל-ImsService וקוראת ל- ImsService#createRcsFeature
כאשר היא מזהה שהחבילה צריכה לספק RCS. אם כרטיס ה-SIM המשויך לשירות RCS מוסר, המסגרת קוראת אוטומטית ל- RcsFeature#onFeatureRemoved
ולאחר מכן מנקה את ImsService
המשויך לתכונת RCS. פונקציונליות זו יכולה להסיר חלק מהלוגיקת הזיהוי/הכריכה המותאמת אישית שתכונת RCS הייתה צריכה לספק אחרת.
רישום של תכונות נתמכות
מסגרת הטלפוניה נקשרת תחילה ל-ImsService כדי לבצע שאילתות על התכונות שבהן היא תומכת באמצעות ImsService#querySupportedImsFeatures
API. לאחר שהמסגרת תחשב באילו תכונות ה-ImsService יתמוך, היא תקרא ImsService#create[...]Feature
עבור כל תכונה שה-ImsService יהיה אחראי עליה. אם התכונות שבהן יישום IMS תומך משתנות, תוכל להשתמש ImsService#onUpdateSupportedImsFeatures
כדי לאותת למסגרת לחשב מחדש תכונות נתמכות. עיין בתרשים למטה למידע נוסף על האתחול והכריכה של ImsService.
איור 2: אתחול וכריכה של ImsService
זיהוי מסגרת ואימות של הטמעת ImsService
לאחר שה-ImsService הוגדר כהלכה ב-AndroidManifest.xml, יש להגדיר את הפלטפורמה כך שתתקשר (באופן מאובטח) ל-ImsService כאשר הדבר מתאים. ישנם שני סוגים של ImsServices שהמסגרת מתקשרת אליהם:
- ImsService "עקיפה" של הספק: שירותי ImsServices אלה נטענים מראש על המכשיר אך מחוברים לספק סלולרי אחד או יותר והם יהיו קשורים רק כאשר יוכנס כרטיס SIM תואם. זה מוגדר באמצעות
-
config_ims_mmtel_package_override_string
מפתח CarrierConfig עבור ImsServices המטמיע תכונות MMTEL. -
config_ims_rcs_package_override_string
עבור ImsServices המטמיעים תכונות RCS.
-
- מכשיר "ברירת מחדל" ImsService: זהו ברירת המחדל של ImsService שנטען על המכשיר על ידי OEM ואמור להיות מתוכנן לספק שירותי IMS בכל המצבים שבהם הספק ImsService אינו זמין והוא שימושי במצבים שבהם למכשיר אין כרטיס SIM הוכנס או שלכרטיס ה-SIM שהוכנס לא מותקן איתו ספק ImsService. זה מוגדר בשכבת העל של המכשיר באמצעות התצורות הבאות:
-
config_ims_mmtel_package
: מיישמת תכונות MMTEL -
config_ims_rcs_package
: מיישמת תכונות RCS
-
אנדרואיד אינה תומכת באפליקציות עם יישומי ImsService הניתנים להורדה של צד שלישי, כך שכל מימושי ImsService המוגדרים כאן נדרשים להיות יישומי מערכת וחייבים להימצא בתיקייה /system/priv-app/ או /product/priv-app/ כדי להעניק את המתאים הרשאות (כלומר הרשאות טלפון, מיקרופון, מיקום, מצלמה ואנשי קשר). על ידי אימות אם שם החבילה של מימוש ה-IMS תואם את ערכי CarrierConfig או שכבת-על המכשיר שהוגדרו לעיל, רק יישומים מהימנים ומותקנות מראש כבולים.
התאמה אישית
יישומים המיישמים ImsService מאוגדים רק במכשירים שבהם הם מוגדרים בתור הספק "עוקף" את תצורות ImsService או "ברירת המחדל" של ImsService של התקן עבור פונקציונליות MMTEL או RCS. ה-ImsService מאפשר גם לאפשר או לבטל את תכונות ה-IMS שבהן הוא תומך (MMTEL ו-RCS) באופן דינמי באמצעות עדכונים בשיטת ImsService#onUpdateSupportedImsFeatures
. זה מפעיל את המסגרת כדי לחשב מחדש אילו ImsServices קשורים ובאילו תכונות הם תומכים. אם אפליקציית ה-IMS תעדכן את המסגרת ללא תמיכה בתכונות, ה-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 המוגדר בעקיפה של תצורת הספק, המסגרת תחזור לברירת המחדל של ImsService. כך, למשל, הטבלה שלהלן מתארת באיזו תכונה IMS תשתמש במסגרת המסגרת בהינתן שלושה יישומי IMS המטמיעים ImsServices המותקנים במערכת עם התכונות הבאות:
- ספק A ImsService תומך ב-RCS
- Carrier B ImsService תומך ב-RCS ו-MMTel
- OEM ImsService תומך ב-RCS ו-MMTel
כרטיס SIM הוכנס | תכונת RCS | תכונת MMTel |
---|---|---|
מוביל א | מוביל א | OEM |
מוביל ב | מוביל ב | מוביל ב |
אין סים | OEM | OEM |
מַתַן תוֹקֵף
כלים לאימות הטמעת IMS עצמה אינם כלולים מכיוון שמפרטי IMS גדולים במיוחד ומשתמשים בציוד אימות מיוחד. הבדיקות יכולות רק לוודא שמסגרת הטלפוניה מגיבה כראוי ל-ImsService API.
פתח אפליקציית IMS
בעת פיתוח אפליקציית IMS המתממשקת עם מחסנית הטלפוניה של אנדרואיד, אנו ממליצים לציין שהאפליקציה יכולה להאזין או לשנות את המצב של מופע ImsService המצורף עבור מנוי ספק ספציפי.
כדי להאזין או לשנות את המצב של ImsService עבור תכונות MMTEL ו-RCS, השתמש במחלקה ImsManager
כדי לקבל מופע של ImsMmTelManager
, ImsRcsManager
או IMS ProvisioningManager
ספציפית. לאחר מכן, האפליקציה יכולה להאזין למצבי שירות ואספקה ספציפיים ל-IMS כגון:
- תכונות MMTEL או RCS מופעלות וזמינות
- עדכונים כאשר מצב הרישום של IMS משתנה
- סטטוס הקצאה של תכונות IMS
- תכונות IMS שהמשתמש הפעיל
השתמש ב-ImsStateCallback
למרות ש-ImsService הוא שירות מאוגד באופן מתמשך, השירות הכבול עשוי להשתנות כאשר כרטיס SIM חדש או מנוי משובץ הופך לפעיל או כאשר משתנה תצורת הספק. מכיוון ש-ImsService אינו חלק מתהליך הטלפוניה, אפליקציה עשויה להיתקל בחריגים בלתי צפויים בעת ניסיון לגשת לממשקי IMS API אם ImsService קורס באופן בלתי נראה או אינו קשור בגלל מנוי או שינוי תצורה.
במכשירים המריצים אנדרואיד 13 ומעלה, כדי לפקח אם מופע ImsService עבור מנוי משויך זמין או לא זמין, אפליקציה יכולה להשתמש במחלקת ImsStateCallback
. כאשר מקבלים מופע של ImsMmTelManager
או ImsRcsManager
, אנו ממליצים שהאפליקציה תירשם תחילה להתקשרות חוזרת של IMS באמצעות ImsMmTelManager#registerImsStateCallback
או ImsRcsManager#registerImsStateCallback
. כדי להמשיך לקבל עדכוני התקשרות חוזרת עבור מנויים ספציפיים כאשר ImsService יחזור להיות זמין, על האפליקציה לבטל את הרישום או לבטל התקשרות חוזרות קיימות שנרשמו דרך ImsMmTelManager
, ImsRcsManager
או ProvisioningManager
; ורשום התקשרויות חדשות.
אם יש מנוי שאינו תומך ב-IMS, המסגרת קוראת ל- ImsStateCallback#onUnavailable
עם הסיבה REASON_NO_IMS_SERVICE_CONFIGURED
. המשמעות היא ש-ImsService והממשקי API הקשורים ל-IMS אינם זמינים עבור המנוי.
במקרה הבלתי סביר שתהליך הטלפוניה קורס, האפליקציה מקבלת ImsStateCallback#onError
ואינה מקבלת עוד עדכונים על מופע ImsStateCallback
הרשום. כדי להתאושש ממצב זה, רשום מחדש את מופע ImsStateCallback
עבור המנוי המשויך על ידי קריאה ל- ImsMmTelManager#registerImsStateCallback
או ImsRcsManager#registerImsStateCallback
.