Für Geräte mit Android 13 oder höher unterstützt Android mehrere aktivierte Profile (MEPs) für eUICC. Diese Funktion ermöglicht Geräten Dual-SIM-Unterstützung mit einem einzigen eSIM-Chip, der über mehrere SIM-Profile verfügen und gleichzeitig eine Verbindung zu zwei verschiedenen Mobilfunkanbietern herstellen kann. Gerätehersteller müssen mit SoC-Anbietern und eSIM-Chipsatz-Anbietern zusammenarbeiten, um diese Funktion in ihre Geräte zu integrieren.
Hintergrund
Auf Geräten mit Android 12 und niedriger bietet AOSP begrenzte Unterstützung, sodass eine einzelne eSIM mehrere Profile gleichzeitig unterstützen kann. Trotz der erheblichen Platz- und Kosteneinsparungen, die eSIM bietet, hält dieser Mangel an Dual-SIM-Unterstützung Gerätehersteller davon ab, reine eSIM-Geräte einzuführen. Um Dual-SIM-Unterstützung auf einem reinen eSIM-Gerät bereitzustellen, müssen Gerätehersteller zwei eSIM-Elemente in das Gerät packen, was die Stücklistenkosten (BOM) erhöht und zu einer schlechten Benutzererfahrung bei der Abonnementverwaltung führt. Die in AOSP ab Android 13 verfügbare MEP-Funktion behebt dieses Problem.
Änderung der eUICC-Architektur
Dieser Abschnitt bietet einen Vergleich der eSIM-Chiparchitektur für Geräte mit MEP mit Android 13 und für Geräte ohne MEP mit Android 12 und niedriger. Bei Geräten, die MEP unterstützen, wie in Abbildung 1 dargestellt, enthält der eSIM-Steckplatz mehrere eUICC-Ports, wobei jeder Port über ein aktiviertes Profil verfügen kann. Bei dieser Architektur unterstützt ein einzelner eUICC (ein einzelner physischer Steckplatz) Dual-SIM-Dual-Standby (DSDS), indem jeder eUICC-Port mit einem Modem-Basisband verbunden ist. Abbildung 2 beschreibt die eSIM-Chiparchitektur für Geräte ohne MEP.
Abbildung 1. eSIM-Chiparchitektur mit MEP-Unterstützung (Android 13 oder höher)
Abbildung 2. eSIM-Chip-Architektur ohne MEP-Unterstützung (Android 12 oder niedriger)
API-Informationsfluss für mehrere aktivierte Profile
Abbildung 3 beschreibt den Informationsfluss für MEP für eUICC in Android 13. Das Telefonie-Framework enthält die UiccPort
Klasse, die die physische Struktur auf eUICC darstellt. Die UiccPort
Klasse wird für alle Arten von SIM-Karten verwendet: physische SIM (pSIM), integrierte SIM (iSIM) und eingebettete SIM (eSIM). Bei einem eUICC mit mehreren Ports werden ein einzelnes UiccSlot
Objekt und UiccCard
Objekt mehreren UiccPort
Instanzen zugeordnet. Jede UiccPort
Instanz kann mit höchstens einer UiccProfile
Instanz verknüpft sein. Dieser Ablauf ermöglicht UiccPort
die Zuordnung zu einem logischen Steckplatz und UiccSlot
(physischer Steckplatz) die Zuordnung zu mehreren logischen Steckplätzen.
Abbildung 3. Informationsfluss für eUICC mit MEP-Unterstützung
Implementierung
In diesem Abschnitt wird beschrieben, wie die MEP-Funktion implementiert wird, einschließlich Details zu HAL-Anforderungen, APIs und Benutzeroberfläche. Gerätehersteller sollten mit SoC-Anbietern und eSIM-Chipsatz-Anbietern zusammenarbeiten, um MEP zu unterstützen.
HAL-Anforderungen
Um MEP für eUICC zu unterstützen, implementieren Sie die folgenden IRadio 2.0 AIDL HAL APIs .
Kartenstatus
Das Modem muss die CardStatus
API als Antwort auf die Methode getIccCardStatusResponse
unterstützen. Die Antwort muss den Portindex und den durch SimPortSlotMapping
angegebenen physischen Steckplatzindex enthalten.
SimSlotStatus
Das Modem muss die SimSlotStatus
API als Antwort auf die getSimSlotsStatus
-Methode unterstützen. Der Status des SIM-Steckplatzes umfasst 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.
setSimSlotMapping
Die setSimSlotMapping
Methode muss ein Array von SimPortSlotMapping
übergeben. Der Index des Arrays ist der logische Steckplatz und SimPortSlotMapping
gibt den entsprechenden zugeordneten Port und den physischen Steckplatzindex an. Die setSimSlotMapping
Methode legt die Zuordnung von Ports zu logischen Steckplätzen fest. Die LPA-App verwendet diese Methode, um den aktiven Port auszuwählen.
APIs, die MEP für eUICC unterstützen
Android-Geräte, die mehrere aktivierte Profile als Teil 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 einen bestimmten 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. - (Veraltet)
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 auf diesem Port ein aktiviertes Abonnement vorhanden ist. -
getPortIndex
: Gibt den Portindex zurück. -
getLogicalSlotIndex
: Gibt den Stapelindex des aktiven logischen Modems zurück.
AbonnementInfo
- (Android 13 und höher)
getPortIndex
: Gibt den Portindex zurück, für den das Abonnement aktiviert ist. Wenn das Abonnement deaktiviert ist, wirdINVALID_PORT_ID -1
zurückgegeben.
EuiccManager
-
switchToSubscription
: Wechselt zu einem bestimmten Abonnement. Wird von Apps verwendet, die keine Netzbetreiberprivilegien für aktive Abonnements haben. Beim Aufruf löst die Plattform intern den Portindex über einen Drei-Auswahl- Auswahldialog auf, um das ausgewählte aktive Abonnement zu deaktivieren, wenn keine verfügbaren Ports vorhanden sind. Apps für Android 13 und höher dürfen diese API nicht verwenden, um ein Abonnement durch Übergabe einer ungültigen Abonnement-ID zu deaktivieren. Stattdessen müssen sie dieswitchToSubscription
Methode (hinzugefügt in Android 13) mit dem angegebenen Portindex verwenden. - (Android 13 und höher)
switchToSubscription(int subscriptionId, int portIndex, PendingIntent callback)
: Wechselt zu einem bestimmten Abonnement. Beim Aufrufen von Apps mit Netzbetreiberprivilegien gegenüber den aktiven Abonnements kann angegeben werden, auf welchem Port das Abonnement 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 für ihn kein Abonnement aktiviert ist oder die anrufende App über Netzbetreiberrechte für das auf dem ausgewählten Port installierte Abonnement verfügt.
EuiccService
- (Android 13 und höher)
onSwitchToSubscriptionWithPort
: Wechselt zu einem bestimmten Abonnement an einem angegebenen Port. Die LPA-Implementierung muss dies auf Android 13 und höher unterstützen.
TelefonieManager
- (Android 13 und höher)
getSimApplicationState
: Gibt eine Konstante zurück, die den Status der Kartenanwendung angibt. Diese API übergibt sowohl einen physischen Steckplatzindex als auch einen Portindex. Die MethodegetSimApplicationState(int physicalSlotIndex)
(veraltet) übergibt nur den Index des physischen Steckplatzes, um einsimApplicationState
Objekt abzurufen. - (Android 13 und höher)
setSimSlotMapping(Collection<UiccSlotMapping> slots)
: Ordnet die logischen Steckplätze physischen Steckplätzen und Ports zu. - (Android 13 und höher)
Collection<UiccSlotMapping> getSimSlotMapping
: Ruft die Zuordnung von logischen Steckplätzen zu physischen SIM-Steckplätzen und Portindizes ab.
Benutzeroberfläche
Um die Unklarheit bei der Auswahl des eSIM-Ports zu beseitigen, müssen Benutzer auf Geräten, die MEP unterstützen, in der Lage sein, eines der aktiven Abonnements zu deaktivieren, um ein neues Abonnement zu aktivieren. In Android 13 enthält AOSP einen Benutzerfluss mit einem Drei-Auswahl -Dialogfeld , das auf Abonnements angewendet werden kann und Benutzerflüsse über die Einstellungen-App ermöglicht. Abbildung 4 zeigt ein Beispiel für diesen UX-Fluss.
Abbildung 4. Benutzerablauf zum Aktivieren des SIM-Abonnements
Feature-Flags
Um MEP zu unterstützen, müssen Geräte die folgenden Funktionsflags deklarieren:
LPA-Implementierung
Stellen Sie zur Unterstützung von MEP sicher, dass Ihre LPA- Implementierung die folgenden Anforderungen erfüllt:
- Implementiert die APIs von EuiccService zur Unterstützung mehrerer Ports.
- Verwendet die APIs zur Portauswahl und Profilaktivierung.
- Bietet UX, mit dem Netzbetreiber-Apps Profile auf ausgewählten Ports aktivieren können.
Validierung
Um Ihre Implementierung der MEP-Funktion zu testen, stellen Sie sicher, dass die Builds die folgenden CTS-Testfälle bestehen (für öffentliche APIs): /platform/cts/tests/tests/telephony/current/src/android/telephony/euicc/cts
.
Gerätehersteller sollten auch mit ihren Modem-, eUICC-Chip- und eSIM-Betriebssystemanbietern zusammenarbeiten, um sicherzustellen, dass das Gerät Folgendes kann:
- Zwei eSIM-Profile können aktiviert und mit zwei verschiedenen Netzwerken verbunden werden.
- eSIM-Profile können auf jedem eSIM-Port aktiviert und deaktiviert werden.
- Es gibt einen UX-Flow, der von der Mobilfunkanbieter-App ausgelöst wird und es Benutzern ermöglicht, das Profil zu wechseln.
Für Geräte mit Android 13 oder höher unterstützt Android mehrere aktivierte Profile (MEPs) für eUICC. Diese Funktion ermöglicht Geräten Dual-SIM-Unterstützung mit einem einzigen eSIM-Chip, der über mehrere SIM-Profile verfügen und gleichzeitig eine Verbindung zu zwei verschiedenen Mobilfunkanbietern herstellen kann. Gerätehersteller müssen mit SoC-Anbietern und eSIM-Chipsatz-Anbietern zusammenarbeiten, um diese Funktion in ihre Geräte zu integrieren.
Hintergrund
Auf Geräten mit Android 12 und niedriger bietet AOSP begrenzte Unterstützung, sodass eine einzelne eSIM mehrere Profile gleichzeitig unterstützen kann. Trotz der erheblichen Platz- und Kosteneinsparungen, die eSIM bietet, hält dieser Mangel an Dual-SIM-Unterstützung Gerätehersteller davon ab, reine eSIM-Geräte einzuführen. Um Dual-SIM-Unterstützung auf einem reinen eSIM-Gerät bereitzustellen, müssen Gerätehersteller zwei eSIM-Elemente in das Gerät packen, was die Stücklistenkosten (BOM) erhöht und zu einer schlechten Benutzererfahrung bei der Abonnementverwaltung führt. Die in AOSP ab Android 13 verfügbare MEP-Funktion behebt dieses Problem.
Änderung der eUICC-Architektur
Dieser Abschnitt bietet einen Vergleich der eSIM-Chiparchitektur für Geräte mit MEP mit Android 13 und für Geräte ohne MEP mit Android 12 und niedriger. Bei Geräten, die MEP unterstützen, wie in Abbildung 1 dargestellt, enthält der eSIM-Steckplatz mehrere eUICC-Ports, wobei jeder Port über ein aktiviertes Profil verfügen kann. Bei dieser Architektur unterstützt ein einzelner eUICC (ein einzelner physischer Steckplatz) Dual-SIM-Dual-Standby (DSDS), indem jeder eUICC-Port mit einem Modem-Basisband verbunden ist. Abbildung 2 beschreibt die eSIM-Chiparchitektur für Geräte ohne MEP.
Abbildung 1. eSIM-Chiparchitektur mit MEP-Unterstützung (Android 13 oder höher)
Abbildung 2. eSIM-Chip-Architektur ohne MEP-Unterstützung (Android 12 oder niedriger)
API-Informationsfluss für mehrere aktivierte Profile
Abbildung 3 beschreibt den Informationsfluss für MEP für eUICC in Android 13. Das Telefonie-Framework enthält die UiccPort
Klasse, die die physische Struktur auf eUICC darstellt. Die UiccPort
Klasse wird für alle Arten von SIM-Karten verwendet: physische SIM (pSIM), integrierte SIM (iSIM) und eingebettete SIM (eSIM). Bei einem eUICC mit mehreren Ports werden ein einzelnes UiccSlot
Objekt und UiccCard
Objekt mehreren UiccPort
Instanzen zugeordnet. Jede UiccPort
Instanz kann mit höchstens einer UiccProfile
Instanz verknüpft sein. Dieser Ablauf ermöglicht UiccPort
die Zuordnung zu einem logischen Steckplatz und UiccSlot
(physischer Steckplatz) die Zuordnung zu mehreren logischen Steckplätzen.
Abbildung 3. Informationsfluss für eUICC mit MEP-Unterstützung
Implementierung
In diesem Abschnitt wird beschrieben, wie die MEP-Funktion implementiert wird, einschließlich Details zu HAL-Anforderungen, APIs und Benutzeroberfläche. Gerätehersteller sollten mit SoC-Anbietern und eSIM-Chipsatz-Anbietern zusammenarbeiten, um MEP zu unterstützen.
HAL-Anforderungen
Um MEP für eUICC zu unterstützen, implementieren Sie die folgenden IRadio 2.0 AIDL HAL APIs .
Kartenstatus
Das Modem muss die CardStatus
API als Antwort auf die Methode getIccCardStatusResponse
unterstützen. Die Antwort muss den Portindex und den durch SimPortSlotMapping
angegebenen physischen Steckplatzindex enthalten.
SimSlotStatus
Das Modem muss die SimSlotStatus
API als Antwort auf die getSimSlotsStatus
-Methode unterstützen. Der Status des SIM-Steckplatzes umfasst 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.
setSimSlotMapping
Die setSimSlotMapping
Methode muss ein Array von SimPortSlotMapping
übergeben. Der Index des Arrays ist der logische Steckplatz und SimPortSlotMapping
gibt den entsprechenden zugeordneten Port und den physischen Steckplatzindex an. Die setSimSlotMapping
Methode legt die Zuordnung von Ports zu logischen Steckplätzen fest. Die LPA-App verwendet diese Methode, um den aktiven Port auszuwählen.
APIs, die MEP für eUICC unterstützen
Android-Geräte, die mehrere aktivierte Profile als Teil 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 einen bestimmten 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. - (Veraltet)
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 auf diesem Port ein aktiviertes Abonnement vorhanden ist. -
getPortIndex
: Gibt den Portindex zurück. -
getLogicalSlotIndex
: Gibt den Stapelindex des aktiven logischen Modems zurück.
AbonnementInfo
- (Android 13 und höher)
getPortIndex
: Gibt den Portindex zurück, für den das Abonnement aktiviert ist. Wenn das Abonnement deaktiviert ist, wirdINVALID_PORT_ID -1
zurückgegeben.
EuiccManager
-
switchToSubscription
: Wechselt zu einem bestimmten Abonnement. Wird von Apps verwendet, die keine Netzbetreiberprivilegien für aktive Abonnements haben. Beim Aufruf löst die Plattform intern den Portindex über einen Drei-Auswahl- Auswahldialog auf, um das ausgewählte aktive Abonnement zu deaktivieren, wenn keine verfügbaren Ports vorhanden sind. Apps für Android 13 und höher dürfen diese API nicht verwenden, um ein Abonnement durch Übergabe einer ungültigen Abonnement-ID zu deaktivieren. Stattdessen müssen sie dieswitchToSubscription
Methode (hinzugefügt in Android 13) mit dem angegebenen Portindex verwenden. - (Android 13 und höher)
switchToSubscription(int subscriptionId, int portIndex, PendingIntent callback)
: Wechselt zu einem bestimmten Abonnement. Beim Aufrufen von Apps mit Netzbetreiberprivilegien gegenüber den aktiven Abonnements kann angegeben werden, auf welchem Port das Abonnement 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 für ihn kein Abonnement aktiviert ist oder die anrufende App über Netzbetreiberrechte für das auf dem ausgewählten Port installierte Abonnement verfügt.
EuiccService
- (Android 13 und höher)
onSwitchToSubscriptionWithPort
: Wechselt zu einem bestimmten Abonnement an einem angegebenen Port. Die LPA-Implementierung muss dies auf Android 13 und höher unterstützen.
TelefonieManager
- (Android 13 und höher)
getSimApplicationState
: Gibt eine Konstante zurück, die den Status der Kartenanwendung angibt. Diese API übergibt sowohl einen physischen Steckplatzindex als auch einen Portindex. Die MethodegetSimApplicationState(int physicalSlotIndex)
(veraltet) übergibt nur den Index des physischen Steckplatzes, um einsimApplicationState
Objekt abzurufen. - (Android 13 und höher)
setSimSlotMapping(Collection<UiccSlotMapping> slots)
: Ordnet die logischen Steckplätze physischen Steckplätzen und Ports zu. - (Android 13 und höher)
Collection<UiccSlotMapping> getSimSlotMapping
: Ruft die Zuordnung von logischen Steckplätzen zu physischen SIM-Steckplätzen und Portindizes ab.
Benutzeroberfläche
Um die Unklarheit bei der Auswahl des eSIM-Ports zu beseitigen, müssen Benutzer auf Geräten, die MEP unterstützen, in der Lage sein, eines der aktiven Abonnements zu deaktivieren, um ein neues Abonnement zu aktivieren. In Android 13 enthält AOSP einen Benutzerfluss mit einem Drei-Auswahl -Dialogfeld , das auf Abonnements angewendet werden kann und Benutzerflüsse über die Einstellungen-App ermöglicht. Abbildung 4 zeigt ein Beispiel für diesen UX-Fluss.
Abbildung 4. Benutzerablauf zum Aktivieren des SIM-Abonnements
Feature-Flags
Um MEP zu unterstützen, müssen Geräte die folgenden Funktionsflags deklarieren:
LPA-Implementierung
Stellen Sie zur Unterstützung von MEP sicher, dass Ihre LPA- Implementierung die folgenden Anforderungen erfüllt:
- Implementiert die APIs von EuiccService zur Unterstützung mehrerer Ports.
- Verwendet die APIs zur Portauswahl und Profilaktivierung.
- Bietet UX, mit dem Netzbetreiber-Apps Profile auf ausgewählten Ports aktivieren können.
Validierung
Um Ihre Implementierung der MEP-Funktion zu testen, stellen Sie sicher, dass die Builds die folgenden CTS-Testfälle bestehen (für öffentliche APIs): /platform/cts/tests/tests/telephony/current/src/android/telephony/euicc/cts
.
Gerätehersteller sollten auch mit ihren Modem-, eUICC-Chip- und eSIM-Betriebssystemanbietern zusammenarbeiten, um sicherzustellen, dass das Gerät Folgendes kann:
- Zwei eSIM-Profile können aktiviert und mit zwei verschiedenen Netzwerken verbunden werden.
- eSIM-Profile können auf jedem eSIM-Port aktiviert und deaktiviert werden.
- Es gibt einen UX-Flow, der von der Mobilfunkanbieter-App ausgelöst wird und es Benutzern ermöglicht, das Profil zu wechseln.