Auf Geräten mit Android 13 oder höher unterstützt Android mehrere aktivierte Profile (Multiple Enabled Profiles, MEPs) für eUICCs. Mit dieser Funktion können Geräte Dual-SIM-Unterstützung mit einem einzelnen eSIM-Chip bieten, der mehrere SIM-Profile haben und gleichzeitig eine Verbindung zu zwei verschiedenen Mobilfunkanbietern herstellen kann. Gerätehersteller müssen mit SoC-Anbietern und eSIM-Chipsatzanbietern zusammenarbeiten, um diese Funktion in ihre Geräte zu integrieren.
Hintergrund
Auf Geräten mit Android 12 und niedriger bietet AOSP nur eingeschränkte Unterstützung für die gleichzeitige Verwendung mehrerer Profile auf einer einzelnen eSIM. Trotz der erheblichen Platz- und Kosteneinsparungen, die eSIM bietet, verhindert das Fehlen der Dual-SIM-Unterstützung, dass Gerätehersteller Geräte mit ausschließlich eSIM anbieten. Um Dual-SIM-Unterstützung auf einem Gerät mit nur eSIM zu ermöglichen, müssen Gerätehersteller zwei eSIM-Elemente in das Gerät einbauen. Das erhöht die Materialkosten und führt zu einer schlechten Nutzererfahrung bei der Aboverwaltung. Die in AOSP ab Android 13 verfügbare MEP-Funktion behebt dieses Problem.
eUICC-Architektur
In diesem Abschnitt wird die eSIM-Chiparchitektur für Geräte mit MEP für verschiedene Android-Versionen und die eSIM-Chiparchitektur für Geräte ohne MEP beschrieben.
Android 14
Auf Geräten mit Android 14 oder höher unterstützt Android die Optionen „MEP-A1“ und „MEP-B“ für die Auswahl des ISD-R (Issuer Security Domain Root) und die Auswahl von eSIM-Ports gemäß GSMA SGP V22 3.0. Im Folgenden werden die Auswahlmodelle für MEP-A1 und MEP-B ISD-R beschrieben.
MEP-A1:ISD-R ist auf Port 0 ausgewählt (Befehlsport ist 0) und Profile sind auf eSIM-Ports 1 und höher ausgewählt. ES10-Befehle werden immer an Port 0 gesendet. Der Befehlsport und der Zielport sind immer unterschiedlich. Der LPA wählt den Port aus.
Abbildung 1: MEP-A1 ISD-R-Auswahlmodell
MEP-B:ISD-R ist auf einem beliebigen Port ausgewählt und jedem Port kann ein Profil zugewiesen werden. Die Befehle zum Aktivieren und Deaktivieren werden an den Port gesendet, an dem das Profil aktiviert oder deaktiviert werden muss (an dem eine Aktualisierung aussteht). Der Befehlsport und der Zielport sind immer identisch.
Abbildung 2: Auswahlmodell für MEP-B ISD-R
Android 13
Auf Geräten mit Android 13 oder höher, die MEP unterstützen, enthält der eSIM-Slot mehrere eUICC-Ports, wobei jeder Port ein aktiviertes Profil haben kann. Wie in Abbildung 3 dargestellt, unterstützt diese Architektur Dual SIM Dual Standby (DSDS) mit einer einzelnen eUICC (einem einzelnen physischen Slot), indem jeder eUICC-Port mit einem Modem-Basisband verknüpft wird. Android 13 HAL und APIs sind unabhängig von der MEP-Variante.
Abbildung 3: eSIM-Chiparchitektur mit MEP-Unterstützung (Android 13 oder höher)
Android 12 und niedriger
Auf Geräten mit Android 12 oder niedriger ohne MEP (siehe Abbildung 4) kann im eSIM-Slot jeweils nur ein Profil aktiviert sein. DSDS wird auf diesen Geräten nicht unterstützt.
Abbildung 4: eSIM-Chiparchitektur ohne MEP-Unterstützung (Android 12 oder niedriger)
API-Informationsfluss für mehrere aktivierte Profile
Abbildung 5 zeigt den Informationsfluss für MEP für eUICC in Android 13. Das Telefonie-Framework enthält die Klasse UiccPort
, die die physische Struktur auf der eUICC darstellt. Die Klasse UiccPort
wird für alle Arten von SIM-Karten verwendet: physische SIM (pSIM), integrierte SIM (iSIM) und eingebettete SIM (eSIM). Bei einer eUICC mit mehreren Ports werden einem einzelnen UiccSlot
-Objekt und einem einzelnen UiccCard
-Objekt mehrere UiccPort
-Instanzen zugeordnet. Jede UiccPort
-Instanz kann mit maximal einer UiccProfile
-Instanz verknüpft werden. In diesem Ablauf kann UiccPort
einem logischen Slot und UiccSlot
(physischer Slot) mehreren logischen Slots zugeordnet werden.
Abbildung 5: Informationsfluss für eUICC mit MEP-Unterstützung
Implementierung
In diesem Abschnitt wird beschrieben, wie Sie die Funktion für die Mehrfachausgabe implementieren. Außerdem finden Sie hier Details zu HAL-Anforderungen, APIs und der Benutzeroberfläche. Gerätehersteller sollten mit SoC- und eSIM-Chipsatzanbietern zusammenarbeiten, um MEP zu unterstützen.
HAL-Anforderungen
Zur Unterstützung von MEP für eUICC müssen Sie die folgenden IRadio AIDL HAL-APIs implementieren, die sich in /platform/hardware/interfaces/radio/aidl/aidl_api
befinden.
Auf Geräten mit Android 14 oder höher muss die IRadio 2.1-Version der HAL-Schnittstellen verwendet werden, die MultipleEnabledProfileMode
(ISD-R-Auswahlmodell, das vom Modem oder der eUICC unterstützt wird) verwenden und ES10-APDU-Befehlsinformationen während der ICC-Operationen für logische Kanäle übergeben.
CardStatus
Das Modem muss die CardStatus
-API als Antwort auf die Methode getIccCardStatusResponse
unterstützen. Die Antwort muss den Portindex und den physischen Slotindex enthalten, die von SimPortSlotMapping
angegeben werden.
Bei Geräten mit Android 14 oder höher muss das Modem den unterstützten MEP-Modus mit allen CardStatus-Ereignissen bestehen.
SimSlotStatus
Das Modem muss die SimSlotStatus
-API als Antwort auf die Methode getSimSlotsStatus
unterstützen. Der SIM-Slot-Status enthält ein Array der SimPortInfo
-Schnittstelle, das den Portindex, die ICCID für das aktivierte Profil und den Portstatus enthält. Das Modem muss mindestens zwei SimPortInfo
-Objekte zurückgeben.
Bei Geräten mit Android 14 oder höher muss das Modem den unterstützten MEP-Modus mit allen CardStatus-Ereignissen bestehen.
setSimSlotMapping
Die Methode setSimSlotMapping
muss ein Array von SimPortSlotMapping
übergeben.
Der Index des Arrays ist der logische Slot und SimPortSlotMapping
gibt den entsprechenden zugeordneten Port und den physischen Slotindex an. Mit der Methode setSimSlotMapping
wird die Zuordnung von Ports zu logischen Slots festgelegt. Die LPA-App verwendet diese Methode, um den aktiven Port auszuwählen.
APIs zur Unterstützung von MEP für eUICCs
Android-Geräte, die mehrere aktivierte Profile im Rahmen des AOSP-Telefonie-Stacks unterstützen, müssen die folgenden APIs unterstützen.
UiccCardInfo
- (Android 13 und höher)
isMultipleEnabledProfilesSupported
: Gibt zurück, ob diese UICC MEP unterstützt. - (Android 13 und höher)
getPorts
: Gibt die Liste aller möglichen Ports für eine bestimmte UICC zurück. Wenn es sich bei der UICC um eine pSIM oder eSIM handelt, die MEP nicht unterstützt, wird eine Liste mit einem Element zurückgegeben. - (Verworfen)
getIccId
: Gibt eine ICCID zurück. Da eine UICC für Geräte mit MEP mehr als eine ICCID haben kann, verwenden Sie stattdessenUiccPortInfo.getIccId()
.
(Android 13 und höher) UiccPortInfo
getIccId
:Gibt die ICCID zurück, wenn für diesen Port ein Abo aktiviert ist.getPortIndex
: Gibt den Portindex zurück.getLogicalSlotIndex
: Gibt den aktiven logischen Modem-Stack-Index zurück.
SubscriptionInfo
- (Android 13 und höher)
getPortIndex
: Gibt den Portindex zurück, auf dem das Abo aktiviert ist. Wenn das Abo deaktiviert ist, wirdINVALID_PORT_ID -1
zurückgegeben.
EuiccManager
switchToSubscription
:Wechselt zu einem bestimmten Abo. Wird von Apps verwendet, die bei aktiven Abos keine Berechtigung des Mobilfunkanbieters haben. Wenn die Plattform aufgerufen wird, wird der Portindex intern über ein Dialogfeld mit drei Auswahlmöglichkeiten aufgelöst, um das ausgewählte aktive Abo zu deaktivieren, wenn keine Ports verfügbar sind. Apps, die auf Android 13 und höher ausgerichtet sind, dürfen diese API nicht verwenden, um ein Abo durch Übergeben einer ungültigen Abo-ID zu deaktivieren. Stattdessen müssen sie die MethodeswitchToSubscription
(die in Android 13 hinzugefügt wurde) mit dem angegebenen Portindex verwenden.- (Android 13 und höher)
switchToSubscription(int subscriptionId, int portIndex, PendingIntent callback)
: Wechselt zu einem bestimmten Abo. Anruf-Apps mit Betreiberberechtigung für die aktiven Abos können angeben, auf welchem Port das Abo aktiviert werden soll. - (Android 13 und höher)
isSimPortAvailable
: Gibt zurück, ob der übergebene Portindex verfügbar ist. Ein Port ist verfügbar, wenn kein Abo aktiviert ist oder die Anruf-App das Betreiberprivileg für das auf dem ausgewählten Port installierte Abo hat.
EuiccService
- (Android 13 und höher)
onSwitchToSubscriptionWithPort
: Wechselt zu einem bestimmten Abo auf einem angegebenen Port. Die LPA-Implementierung muss dies unter Android 13 und höher unterstützen.
TelephonyManager
- (Android 13 und höher)
getSimApplicationState
:Gibt eine Konstante zurück, die den Status der Kartenanwendung angibt. Diese API übergibt sowohl einen physischen Slotindex als auch einen Portindex. Bei der MethodegetSimApplicationState(int physicalSlotIndex)
(eingestellt) wird nur der physische Slotindex übergeben, um einsimApplicationState
-Objekt abzurufen. - (Android 13 und höher)
setSimSlotMapping(Collection<UiccSlotMapping> slots)
: Ordnet die logischen Slots den physischen Slots und Ports zu. - (Android 13 und höher)
Collection<UiccSlotMapping> getSimSlotMapping
: Ruft die Zuordnung von logischen Slots zu physischen SIM-Slots und Port-Indizes ab.
Benutzeroberfläche
Um die Mehrdeutigkeit bei der Auswahl des eSIM-Ports zu beheben, müssen Nutzer auf Geräten, die MEP unterstützen, eines der aktiven Abos deaktivieren können, um ein neues Abo zu aktivieren. In Android 13 enthält AOSP einen Nutzerfluss mit einem Dialogfeld mit drei Auswahlmöglichkeiten, das auf Nutzerflüsse zum Aktivieren von Abos in den Einstellungen angewendet werden kann. Abbildung 6 zeigt ein Beispiel für diesen UX-Ablauf.
Abbildung 6 User-Flow zum Aktivieren eines SIM-Abos
Funktions-Flags
Zur Unterstützung von MEP müssen Geräte die folgenden Funktions-Flags deklarieren:
LPA-Implementierung
Damit die MEP unterstützt wird, muss die Implementierung des LPA die folgenden Anforderungen erfüllen:
- Implementiert die APIs aus EuiccService zur Unterstützung mehrerer Ports.
- Verwendet die APIs für die Auswahl des Ports und die Aktivierung des Profils.
- Bietet eine Benutzeroberfläche, über die Mobilfunkanbieterprofile auf ausgewählten Ports aktiviert werden können.
Zertifizierungsstufe
Wenn Sie Ihre Implementierung des MEP-Features testen möchten, müssen die Builds die folgenden CTS-Testläufe (für öffentliche APIs) bestehen:
/platform/cts/tests/tests/telephony/current/src/android/telephony/euicc/cts
.
Gerätehersteller sollten außerdem mit ihren Modem-, eUICC-Chip- und eSIM-Betriebssystemanbietern zusammenarbeiten, um sicherzustellen, dass das Gerät Folgendes kann:
- Es können zwei eSIM-Profile aktiviert und mit zwei verschiedenen Netzwerken verbunden werden.
- eSIM-Profile können auf jedem eSIM-Port aktiviert und deaktiviert werden.
- Es gibt einen UX-Ablauf, der durch die Carrier-App ausgelöst wird und es Nutzern ermöglicht, Profile zu wechseln.
Empfehlung für Mobilfunkanbieter
Damit Nutzer den Dienst nicht verlieren, wenn sie eSIM-Profile von einem Port auf einen anderen übertragen, empfehlen wir, dass Mobilfunkanbieter Folgendes unterstützen:
- Flexible Zuordnung von IMEI und SIM
- Mehrere ICCIDs oder SIMs für jede eUICC-Kennung (EID)