多个已启用的配置文件

对于搭载 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 架构更改

本部分比较了搭载 Android 13 并采用 MEP 的设备的 eSIM 卡芯片架构与搭载 Android 12 及更低版本且未采用 MEP 的设备的 eSIM 卡芯片架构。对于支持 MEP 的设备(如图 1 所示),eSIM 卡插槽包含多个 eUICC 端口,其中每个端口都可以有一个已启用的配置文件。借助此架构,单个 eUICC(单个物理插槽)可以通过将每个 eUICC 端口链接至调制解调器基带来支持双 SIM 卡双待机 (DSDS)。图 2 描述了未采用 MEP 的设备的 eSIM 卡芯片架构。

支持 MEP 的 eSIM 卡芯片架构

图 1. 支持 MEP 的 eSIM 卡芯片架构(Android 13 或更高版本)

不支持 MEP 的 eSIM 卡芯片架构

图 2. 不支持 MEP 的 eSIM 卡芯片架构(Android 12 或更低版本)

多个已启用配置文件的 API 信息流

图 3 展示了 Android 13 中适用于 eUICC 的 MEP 的信息流。电话框架包含 UiccPort 类,该类代表 eUICC 上的物理结构。UiccPort 类适用于所有类型的 SIM 卡:实体 SIM 卡 (pSIM)、集成 SIM 卡 (iSIM) 和嵌入式 SIM 卡 (eSIM)。对于具有多个端口的 eUICC,单个 UiccSlot 对象和 UiccCard 对象会映射到多个 UiccPort 实例。每个 UiccPort 实例最多只能关联到一个 UiccProfile 实例。此流程允许 UiccPort 映射到逻辑插槽,并允许 UiccSlot(实体插槽)映射到多个逻辑插槽。

MEP 信息流

图 3. 支持 MEP 的 eUICC 的信息流

实现

本部分介绍了如何实现 MEP 功能,包括有关 HAL 要求、API 和界面的详细信息。设备制造商应与 SoC 供应商和 eSIM 卡芯片组供应商合作以支持 MEP。

HAL 要求

如需为 eUICC 支持 MEP,请实现以下 IRadio 2.0 AIDL HAL API

CardStatus

调制解调器必须支持 CardStatus API,作为对 getIccCardStatusResponse 方法的响应。响应必须包含端口索引和由 SimPortSlotMapping 指定的实体插槽索引。

SimSlotStatus

调制解调器必须支持 SimSlotStatus API,作为对 getSimSlotsStatus 方法的响应。SIM 卡插槽状态包含一个 SimPortInfo 接口数组,其中包括端口索引、已启用配置文件的 ICCID 以及端口状态。调制解调器必须返回至少两个 SimPortInfo 对象。

setSimSlotMapping

setSimSlotMapping 方法必须传递一个 SimPortSlotMapping 数组。数组的索引是逻辑插槽,SimPortSlotMapping 指定对应的映射端口和实体插槽索引。setSimSlotMapping 方法可设置从端口到逻辑插槽的映射。LPA 应用使用此方法来选择活跃端口。

为 eUICC 提供 MEP 支持的 API

作为 AOSP 电话堆栈的一部分,支持启用多个配置文件的 Android 设备需要支持以下 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

SubscriptionInfo

  • (Android 13 及更高版本)getPortIndex:返回已启用订阅的端口索引。如果订阅已停用,则返回 INVALID_PORT_ID -1

EuiccManager

  • switchToSubscription:切换到指定订阅,由对有效订阅不具备运营商特权的应用使用。被调用时,平台会通过包含三个选项的对话框在内部解析端口索引,以便在没有可用的端口时停用所选的有效订阅。以 Android 13 及更高版本为目标平台的应用不得通过传递无效订阅 ID 来使用此 API 停用订阅,而是必须使用指定了端口索引的 switchToSubscription 方法(该方法已添加至 Android 13)。
  • (Android 13 及更高版本)switchToSubscription(int subscriptionId, int portIndex, PendingIntent callback):切换到指定订阅。如果发起调用的应用对于有效订阅具备运营商特权,则这些应用可以指定用于启用订阅的端口。
  • (Android 13 及更高版本)isSimPortAvailable:返回结果,以表示传递的端口索引是否可用。如果某个端口未启用订阅或发起调用的应用对于选定端口上安装的订阅具备运营商特权,则该端口可用。

EuiccService

  • (Android 13 及更高版本)onSwitchToSubscriptionWithPort:切换到指定端口上的指定订阅。在 Android 13 及更高版本中,LPA 实现必须提供此项支持。

TelephonyManager

界面

如需解决 eSIM 卡端口选择不明确的问题,在支持 MEP 的设备上,用户必须能够停用其中一个有效订阅,然后才能启用新订阅。在 Android 13 中,AOSP 包含一个提供由三个选项构成的对话框的用户流程,该对话框可应用于“设置”应用中的订阅启用用户流程。图 4 显示了此用户体验流程的一个示例。

MEP SIM 卡订阅的用户流程

图 4.启用 SIM 卡订阅的用户流程

功能标志

为了支持 MEP,设备必须声明以下功能标志:

LPA 实现

如需支持 MEP,请确保您的 LPA 实现满足以下要求:

  • 实现 EuiccService 中的多个 API 以支持多个端口。
  • 使用支持端口选择和配置文件启用的 API
  • 提供允许运营商应用在所选端口上启用配置文件的用户体验。

验证

如需测试 MEP 功能的实现,请确保 build 通过以下 CTS 测试用例(针对公共 API):/platform/cts/tests/tests/telephony/current/src/android/telephony/euicc/cts

设备制造商还应与其调制解调器、eUICC 芯片和 eSIM 卡操作系统供应商合作以确保设备可以执行以下操作:

  • 可以启用两个 eSIM 卡配置文件并将其连接到两个不同的网络。
  • 可以在任何 eSIM 卡端口上激活和停用 eSIM 卡配置文件。
  • 可通过运营商应用触发的用户体验流程允许用户切换配置文件。