搭載 Android 13 以上版本的裝置,Android 會支援 eUICC 的多個啟用設定檔 (MEP)。這項功能可讓裝置透過單一 eSIM 晶片支援雙 SIM 卡,該晶片可擁有多個 SIM 卡設定檔,並同時連上兩個不同的電信業者。裝置製造商必須與 SoC 供應商和 eSIM 晶片組供應商合作,才能在裝置上整合這項功能。
背景
在搭載 Android 12 以下版本的裝置上,AOSP 僅提供有限的支援,允許單一 eSIM 同時支援多個設定檔。儘管 eSIM 可大幅節省空間和成本,但由於缺乏雙 SIM 卡支援功能,因此裝置製造商無法採用僅支援 eSIM 的裝置。為了在僅支援 eSIM 的裝置上提供雙 SIM 卡支援功能,裝置製造商必須在裝置中加入兩個 eSIM 元素,這會增加物料清單 (BOM) 成本,並導致訂閱管理的使用者體驗不佳。從 Android 13 開始,AOSP 提供的 MEP 功能可解決這個問題。
eUICC 架構
本節說明支援 MEP 的裝置 (適用於不同 Android 版本) 和不支援 MEP 的裝置的 eSIM 晶片架構。
Android 14
針對搭載 Android 14 以上版本的裝置,Android 支援 MEP-A1 和 MEP-B 選項,可用於選取發出者安全性網域根目錄 (ISD-R) 和 eSIM 連接埠,如 GSMA SGP V22 3.0 所述。以下說明 MEP-A1 和 MEP-B ISD-R 選取模型。
MEP-A1:在連接埠 0 上選取 ISD-R (指令連接埠為 0),並在 eSIM 連接埠 1 以上選取設定檔。系統一律會將 ES10 指令傳送至通訊埠 0,且指令通訊埠與目標通訊埠一律不同。LPA 會選擇通訊埠。
圖 1. MEP-A1 ISD-R 選用模型
MEP-B:系統會在任何通訊埠上選取 ISD-R,並可為任何通訊埠指派設定檔。啟用和停用指令會傳送至需要啟用或停用設定檔的通訊埠 (等待重新整理)。指令通訊埠和目標通訊埠一律相同。
圖 2. MEP-B ISD-R 選用模型
Android 13
在 Android 13 以上版本的支援 MEP 裝置上,eSIM 插槽包含多個 eUICC 連接埠,可在其中啟用設定檔。如圖 3 所示,在這個架構中,單一 eUICC (單一實體插槽) 會將每個 eUICC 連結至數據機基頻,以支援雙卡雙待模式 (DSDS)。Android 13 HAL 和 API 不受 MEP 變化版本影響。
圖 3. 支援 MEP 的 eSIM 晶片架構 (Android 13 以上版本)
Android 12 以下版本
如果是搭載 Android 12 以下版本的裝置,但沒有 MEP (如圖 4 所示),eSIM 卡插槽只會一次支援一個已啟用的設定檔,且裝置不支援 DSDS。
圖 4:不支援 MEP 的 eSIM 卡晶片架構 (Android 12 以下版本)
多個已啟用設定檔的 API 資訊流程
圖 5 說明 Android 13 中 eUICC 的 MEP 資訊流程。電話服務架構包含 UiccPort
類別,代表 eUICC 上的實體結構。UiccPort
類別適用於所有類型的 SIM 卡:實體 SIM 卡 (pSIM)、整合式 SIM 卡 (iSIM) 和嵌入式 SIM 卡 (eSIM)。如果是具有多個通訊埠的 eUICC,單一 UiccSlot
物件和 UiccCard
物件會對應至多個 UiccPort
執行個體。每個 UiccPort
例項最多可連結至一個 UiccProfile
例項。這個流程可讓 UiccPort
對應至邏輯型別,而 UiccSlot
(實體型別) 則可對應至多個邏輯型別。
圖 5. 支援 MEP 的 eUICC 資訊流
實作
本節說明如何實作 MEP 功能,包括 HAL 需求、API 和使用者介面的詳細資訊。裝置製造商應與 SoC 廠商和 eSIM 卡晶片組廠商合作來支援 MEP。
HAL 需求
如要支援 eUICC 的 MEP,請實作下列位於 /platform/hardware/interfaces/radio/aidl/aidl_api
的 IRadio AIDL HAL API。
搭載 Android 14 以上版本的裝置必須使用 IRadio 2.1 版的 HAL 介面,該介面會使用 MultipleEnabledProfileMode
(modem 或 eUICC 支援的 ISD-R 選取模型),並在 ICC 邏輯通道作業期間傳遞 ES10 APDU 指令資訊。
CardStatus
數據機必須支援 CardStatus
API,以回應 getIccCardStatusResponse
方法。回應必須包含 SimPortSlotMapping
指定的通訊埠索引和實體插槽索引。
如果是搭載 Android 14 以上版本的裝置,則調製解調器必須透過所有 CardStatus 事件傳遞支援的 MEP 模式。
SimSlotStatus
數據機必須支援 SimSlotStatus
API,以回應 getSimSlotsStatus
方法。SIM 卡插槽狀態包含 SimPortInfo
介面的陣列,其中包含通訊埠索引、已啟用設定檔的 ICCID 和通訊埠狀態。數據機必須傳回至少兩個 SimPortInfo
物件。
如果是搭載 Android 14 以上版本的裝置,則調製解調器必須透過所有 CardStatus 事件傳遞支援的 MEP 模式。
setSimSlotMapping
setSimSlotMapping
方法必須傳遞 SimPortSlotMapping
的陣列。陣列的索引是邏輯插槽,而 SimPortSlotMapping
則指定對應的對應通訊埠和實體插槽索引。setSimSlotMapping
方法會設定從通訊埠到邏輯插槽的對應項目。LPA 應用程式會使用這個方法選取有效的連接埠。
支援 eUICC 的 MEP API
支援多個已啟用設定檔的 Android 裝置必須是 AOSP 電話堆疊的一部分,才能支援下列 API。
UiccCardInfo
- (Android 13 以上版本)
isMultipleEnabledProfilesSupported
: 傳回此 UICC 是否支援 MEP。 - (Android 13 以上版本)
getPorts
:傳回特定 UICC 的所有可能通訊埠清單。如果 UICC 是不支援 MEP 的 pSIM 或 eSIM 卡,則會傳回一個元素清單。 - (已淘汰)
getIccId
:傳回 ICCID。由於 UICC 可為 MEP 裝置提供多個 ICCID,請改用UiccPortInfo.getIccId()
。
(Android 13 以上版本) UiccPortInfo
getIccId
:如果這個通訊埠有已啟用的訂閱項目,系統會傳回 ICCID。getPortIndex
:傳回通訊埠索引。getLogicalSlotIndex
:傳回有效的邏輯數據機堆疊索引。
SubscriptionInfo
- (Android 13 以上版本)
getPortIndex
: 傳回已啟用訂閱的連接埠索引。如果訂閱項目已停用,則會傳回INVALID_PORT_ID -1
。
EuiccManager
switchToSubscription
:切換至特定訂閱項目。適用於未具備有效訂閱項目的電信業者特權的應用程式。呼叫時,平台會透過選擇三選對話方塊,在內部解析通訊埠索引,這樣在沒有可用通訊埠時停用所選有效訂閱項目。指定 Android 13 以上版本的應用程式不得使用這個 API 來停用訂閱項目,方法是傳遞無效的訂閱項目 ID,而是必須使用指定通訊埠索引的switchToSubscription
方法 (新增於 Android 13 中)。- (Android 13 以上版本)
switchToSubscription(int subscriptionId, int portIndex, PendingIntent callback)
: 切換至指定的訂閱項目。使用有效訂閱項目的電信業者權限呼叫應用程式,可以指定要啟用哪個通訊埠。 - (Android 13 以上版本)
isSimPortAvailable
: 傳回傳遞的 port 索引是否可用。如果通訊埠未啟用訂閱項目,或呼叫應用程式對所選通訊埠上安裝的訂閱項目擁有電信業者權限,就會使用該通訊埠。
EuiccService
- (Android 13 以上版本)
onSwitchToSubscriptionWithPort
: 切換至指定連接埠上的特定訂閱項目。LPA 實作必須在 Android 13 以上版本中支援這項功能。
TelephonyManager
- (Android 13 以上版本)
getSimApplicationState
: 傳回常數,指出卡片應用程式的狀態。這個 API 會傳遞實體運算單元索引和通訊埠索引。getSimApplicationState(int physicalSlotIndex)
方法 (已淘汰) 只會傳遞實體插槽索引,以便取得simApplicationState
物件。 - (Android 13 以上版本)
setSimSlotMapping(Collection<UiccSlotMapping> slots)
:將邏輯運算單元對應至實體運算單元和通訊埠。 - (Android 13 以上版本)
Collection<UiccSlotMapping> getSimSlotMapping
:取得從邏輯運算單元到實體 SIM 卡運算單元和通訊埠索引的對應關係。
使用者介面
如要解決 eSIM 卡通訊埠選取作業模糊不清的問題,在支援 MEP 的裝置上,使用者必須停用其中一個有效訂閱項目,才能啟用新的訂閱項目。在 Android 13 中,AOSP 包含一個使用者流程,其中包含三個選項的對話方塊,可套用至從「設定」應用程式啟用訂閱項目的使用者流程。圖 6 顯示此使用者體驗流程的範例。
圖 6. 啟用 SIM 卡訂閱的使用者流程
Feature flags
如要支援 MEP,裝置必須宣告下列功能旗標:
LPA 導入
如要支援 MEP,請確認您的 LPA 導入作業符合下列規定:
- 實作 EuiccService 中的 API,以支援多個通訊埠。
- 使用 API 選取通訊埠及啟用設定檔。
- 提供使用者體驗,允許電信業者應用程式啟用所選通訊埠上的設定檔。
驗證
如要測試 MEP 功能的實作方式,請確認建構項目通過下列 CTS 測試案例 (適用於公開 API):/platform/cts/tests/tests/telephony/current/src/android/telephony/euicc/cts
。
裝置製造商也應與其數據機、eUICC 晶片和 eSIM OS 供應商合作,確保裝置可執行下列操作:
- 你可以啟用兩個 eSIM 卡設定檔,並將其連接至兩個不同的網路。
- 您可以在任何 eSIM 連接埠上啟用及停用 eSIM 卡設定檔。
- 電信業者應用程式會觸發使用者體驗流程,讓使用者切換設定檔。
推薦電信業者
為確保使用者在將 eSIM 設定檔從一個連接埠移至另一個連接埠時不會失去服務,我們建議電信業者提供以下支援:
- IMEI 和 SIM 卡的流暢對應
- 每個 eUICC ID (EID) 對應多個 ICCID 或 SIM