Android 9 導入了名為 ImsService 協助您實作 IP 多媒體子系統 (IMS)。ImsService API 是一種 Android 平台與供應商之間定義明確的介面 實作電信業者提供的 IMS 實作
圖 1. ImsService 總覽
透過使用 ImsService 介面,IMS 實作器可以提供 向平台傳送資訊,例如 IMS 註冊資訊 整合 IMS,並且整合 MmTel 功能,可提供語音和視訊功能 撥號中.ImsService API 也是 Android System API,表示 。IMS 裝置上預先安裝的應用程式也可以設為 可以透過 Play 商店更新
範例和來源
Android 透過 Android 開放原始碼計畫提供應用程式,會實作應用程式的某些部分 用於測試和開發用途的 ImsService API。您可以在 應用程式 /testapps/ImsTestService。
如需 ImsService API 的說明文件,請前往 ImsService 以及其他 API 類別中
實作
ImsService API 是一種高階 API,可讓您透過多種方式實作 IMS 視可用硬體而定舉例來說 取決於是否完全在應用程式中實作 IMS 或者部分或完全卸載至數據機Android 不提供可卸載基頻處理器的公開 HAL,因此任何 必須在數據機上使用 HAL 擴充功能進行卸載。
與舊版 IMS 實作的相容性
雖然 Android 9 包含 ImsService API
搭載舊版 IMS 的裝置不支援這個 API。
針對這些裝置,舊版 AIDL 介面和包裝函式類別已移動
附加至 android.telephony.ims.compat
命名空間。升級至 Android 時
9,舊型裝置必須按照下列步驟進行才能繼續操作
舊版 API 的支援
- 變更 ImsService 實作的命名空間,使其從
android.telephony.ims.compat
命名空間 API。 - 請在 AndroidManifest.xml 中修改 ImsService 服務定義,以便使用
android.telephony.ims.compat.ImsService
意圖篩選器動作,而非android.telephony.ims.ImsService
動作。
接著,架構會使用相容性層繫結至 ImsService
才能使用舊版 Search Ads 360
ImsService
實作。
使用架構註冊 ImsService
ImsService API 是以服務的形式實作,也就是 Android 架構
繫結至 IMS 實作。三個步驟
,以便使用
這個架構的重點在於首先,ImsService 實作必須自行向
使用應用程式的AndroidManifest.xml
應用程式;第二,您必須
定義實作作業支援的 IMS 功能 (MmTel 或 RCS);第三
必須在電信業者內驗證為值得信賴的 IMS 實作
設定或裝置重疊。
服務定義
IMS 應用程式透過新增
將 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>
AndroidManifest.xml
中的 service
定義定義了以下內容
屬性,這些都是正確作業的必備要素:
directBootAware="true"
:允許系統找到並執行服務 使用者解鎖裝置前的telephony
。服務無法存取 裝置加密儲存空間。如要 資訊,請參閱 支援直接啟動模式 和 檔案型加密。persistent="true"
:允許這項服務持續執行,但不得 藉此取回記憶體。這個屬性「只有」 是以系統應用程式形式建構而成permission="android.permission.BIND_IMS_SERVICE"
:可確保只有 已授予BIND_IMS_SERVICE
權限的處理程序, 繫結至應用程式這樣可避免惡意應用程式繫結至 服務,因為只有系統應用程式才能 這個架構的重點在於
服務也必須透過動作指定 intent-filter
元素
android.telephony.ims.ImsService
。這樣一來,架構就能找出
ImsService
。
IMS 功能規格
在 AndroidManifest.xml 時,ImsService 必須定義其支援的 IMS 功能。 Android 目前支援 MmTel 和 RCS 功能,但只有 MmTel 已整合到架構中雖然目前沒有整合 RCS API 即使將架構宣告為 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 備用方案
以便撥打緊急救援服務電話必須為此定義 FEATURE_MMTEL
功能
一個待定義的特徵
FEATURE_RCS
ImsService API 不會實作任何 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 實作的架構偵測和驗證
在 AndroidManifest.xml 中正確定義 ImsService 後, 平台必須在 或適當。這個架構會繫結至兩種 ImsServices:
- 電信業者「覆寫」ImsService:這些 ImsServices 會預先載入至
裝置但與一或多個行動電信業者連線,
插入相符的 SIM 卡時繫結。這項設定會使用
config_ims_mmtel_package_override_string
敬上 導入 MMTEL 功能的 ImsServices 適用 CarrierConfig 金鑰。config_ims_rcs_package_override_string
敬上 適用於實作 RCS 功能的 ImsServices
- 裝置「預設」ImsService:這是所載入的預設 ImsService
提交到裝置上,且在設計上應以
則適合用來處理
裝置未插入 SIM 卡或 SIM 卡
未插入任何電信業者 ImsService。這是
使用以下設定 (在裝置疊加層中定義):
config_ims_mmtel_package
: 實作 MMTEL 功能config_ims_rcs_package
: 實作 RCS 功能
Android 不支援含有第三方可下載 ImsService 的應用程式 所以這裡定義的所有 ImsService 實作都會 必須是系統應用程式,且必須位於 /system/priv-app/ 或 /product/priv-app/ 資料夾來授予適當權限 (即電話、 麥克風、位置資訊、相機和聯絡人權限)。確認 IMS 實作項目的套件名稱與 CarrierConfig 或裝置相符 疊加值如上所述,只有受信任的且預先安裝的應用程式才會 繫結。
自訂
只有實作 ImsService 的應用程式才會繫結至其平台
已設為「覆寫」電信業者ImsService 或裝置「預設」
MMTEL 或 RCS 功能的 ImsService 設定。
ImsService 還允許其支援的 IMS 功能 (MMTEL 和 RCS)
可以手動啟用或停用
ImsService#onUpdateSupportedImsFeatures
方法。將觸發架構
重新計算 ImsServices 綁定的項目及支援的功能。如果
IMS 應用程式更新架構時,系統不支援其中的功能,ImsService
直到手機重新啟動或插入新的 SIM 卡為止
符合 IMS 應用程式。
多個 ImsService 的繫結優先順序
這個架構無法支援繫結至所有可能為 已預先載入在裝置上,且每個 SIM 卡插槽最多會繫結至兩個 ImsServices (每項功能各有一個 ImsService)。
- 由 CarrierConfig 值定義的 ImsService 套件名稱
使用 SIM 卡時:
config_ims_[mmtel/rcs]_package_override_string
已插入 - 裝置疊加值中定義的 ImsService 套件名稱,為
config_ims_[mmtel/rcs]_package
包括沒有 SIM 卡的保護殼 已插入卡片。這項 ImsService「必須」支援緊急 MmTel 功能。
您必須擁有在 針對會使用該套件或 裝置重疊 (如上文定義)。
現在,我們會詳細說明每項功能。裝置 (單一或多張 SIM 卡) 載入了一張 SIM 卡,就能使用 MMTel 和 RCS 兩種 IMS 功能。 架構會嘗試按上述定義順序,為每個功能與 表示該功能不適用於電信業者定義的 ImsService 設定覆寫後,架構將改回使用預設的 ImsService。 舉例來說,下表說明瞭架構將為 使用安裝在系統上的三個 IMS 應用程式 包含下列功能:
- 電信業者 A ImsService 支援 RCS
- 電信業者 B ImsService 支援 RCS 和 MMTel
- 原始設備製造商 (OEM) ImsService 支援 RCS 和 MMTel
已插入 SIM 卡 | RCS 功能 | MMTel 功能 |
---|---|---|
電信業者 A | 電信業者 A | 原始設備製造商 (OEM) |
電信業者 B | 電信業者 B | 電信業者 B |
沒有 SIM 卡 | 原始設備製造商 (OEM) | 原始設備製造商 (OEM) |
驗證
IMS 並未提供用於驗證 IMS 實作的工具 規格過大,且使用特殊的驗證設備。 只能驗證電話通訊架構是否能正確回應 ImsService API。
開發 IMS 應用程式
開發與 Android 電話通訊堆疊互動的 IMS 應用程式時, 建議您指定應用程式可以監聽或修改 為特定電信業者訂閱項目附加的 ImsService 執行個體。
如要監聽或修改 MMTEL 和 RCS 功能的 ImsService 狀態,請使用
這個
ImsManager
敬上
以取得
ImsMmTelManager
、
ImsRcsManager
、
或 IMS 專屬
ProvisioningManager
類別接著,應用程式就能監聽 IMS 專屬服務和佈建狀態
例如:
- 已啟用且可用的 MMTEL 或 RCS 功能
- IMS 註冊狀態變更時接收最新消息
- IMS 功能的佈建狀態
- 使用者啟用的 IMS 功能
使用 ImsStateCallback
雖然 ImsService 是持續繫結的服務,但 新的 SIM 卡或內嵌訂閱生效時,上限可能會有所變動 或是電信業者設定變更時由於 ImsService 不屬於 電話處理程序,應用程式可能會在嘗試時遇到預料之外的例外狀況 存取 IMS API,以免 ImsService 意外當機或因為 訂閱方案或設定變更
在搭載 Android 13 以上版本的裝置上監控
相關訂閱項目的 ImsService 執行個體是否為
可以使用或無法使用
ImsStateCallback
敬上
類別取得 ImsMmTelManager
或 ImsRcsManager
的例項時,
建議應用程式先使用
ImsMmTelManager#registerImsStateCallback
敬上
或
ImsRcsManager#registerImsStateCallback
。
如要在發生以下情況時繼續接收特定訂閱項目的回呼更新:
ImsService 再次可供使用,應用程式必須取消註冊或捨棄現有項目
透過 ImsMmTelManager
、ImsRcsManager
或
ProvisioningManager
;並註冊新的回呼。
如果訂閱項目不支援 IMS,架構會呼叫
ImsStateCallback#onUnavailable
敬上
並說明原因
REASON_NO_IMS_SERVICE_CONFIGURED
。
也就是說,ImsService 和 IMS 相關 API 不適用於
訂閱項目中的所有進階功能!
在電話程序異常終止的情況下,應用程式會收到
ImsStateCallback#onError
敬上
且不會再收到已註冊的 ImsStateCallback
執行個體更新。
如要從這個條件復原,請為以下項目重新註冊 ImsStateCallback
例項:
呼叫相關訂閱項目
ImsMmTelManager#registerImsStateCallback
或
ImsRcsManager#registerImsStateCallback
。