Auf Geräten mit Android 15 oder höher können Sie die Domainauswahl zwischen dem IMS-Dienst und älteren Diensten über kreisförmige Netzwerke mithilfe der DomainSelectionService
-System-API implementieren. DomainSelectionService
ist eine klar definierte Schnittstelle zwischen der Android-Plattform und einer vom Anbieter bereitgestellten Implementierung der Domainauswahl. Über diese Schnittstelle kann die Anbieterimplementierung der Plattform Signalinformationen bereitstellen, z. B. die Domain, über die ausgehende Anrufe und SMS gesendet werden, und den Netzwerktyp-Präferenzen beim Netzwerkscan.
Abbildung 1. Architekturdiagramm für die Domainauswahl
Beispiele und Quelle
Android bietet eine Referenzimplementierung für die Domainauswahlfunktion in AOSP unter TelephonyDomainSelectionService
. Eine ausführliche Dokumentation zur DomainSelectionService
API finden Sie unter DomainSelectionService
und in den anderen Klassen der API.
Implementierung
So implementierst du die Domainauswahl auf einem Android-Gerät:
Erstellen Sie eine Domainauswahl-App. Der Dienst muss in der Datei
AndroidManifest.xml
definiert sein.Fügen Sie dem Geräte-Overlay eine Konfiguration hinzu, damit die Plattform an die
DomainSelectionService
-Implementierung gebunden werden kann.Unterstützen Sie die erforderlichen HAL-Schnittstellen für die Domainauswahl.
In diesem Abschnitt finden Sie weitere Informationen zu diesen Schritten.
Diensteintrag in AndroidManifest.xml hinzufügen
Damit Ihre Anwendung zur Domainauswahl den DomainSelectionService
-Dienst mit dem Framework registrieren kann, fügen Sie der Manifestdatei einen Diensteintrag im folgenden Format hinzu:
<service
android:name="com.example.domainselection.DomainSelectionService"
android:directBootAware="true"
android:persistent="true"
…
android:permission="android.permission.BIND_DOMAIN_SELECTION_SERVICE"
…
<intent-filter>
<action android:name="android.telephony.DomainSelectionService"/>
</intent-filter>
…
</service>
In der Dienstdefinition in AndroidManifest.xml
müssen die folgenden Attribute definiert sein, damit die Domainauswahl funktioniert.
directBootAware="true"
: Der Dienst kann von der Telefonie erkannt und ausgeführt werden, bevor der Nutzer das Gerät entsperrt. Der Dienst kann nicht auf den vom Gerät verschlüsselten Speicher zugreifen, bevor der Nutzer das Gerät entsperrt. Weitere Informationen finden Sie unter Unterstützung des Direct Boot-Modus und Dateibasierte Verschlüsselung.persistent="true"
: Der Dienst wird dauerhaft ausgeführt und nicht vom System beendet, um Speicherplatz freizugeben. Dieses Attribut funktioniert nur, wenn die App als System-App erstellt wurde.permission="android.permission.BIND_DOMAIN_SELECTION_SERVICE"
: Damit wird sichergestellt, dass nur ein Prozess, dem die BerechtigungBIND_DOMAIN_SELECTION_SERVICE
gewährt wurde, an die App gebunden werden kann. So wird verhindert, dass eine schädliche App an den Dienst gebunden wird, da nur System-Apps vom Framework die Berechtigung erteilt werden kann.
Der Dienst muss außerdem das Element intent-filter
mit der Aktion android.telephony.DomainSelectionService
angeben. So kann das Framework den DomainSelectionService
-Dienst finden.
Konfiguration im Geräte-Overlay definieren
Damit die Plattform sicher an den DomainSelectionService
-Dienst gebunden werden kann, fügen Sie dem Geräte-Overlay die folgende Konfiguration hinzu:
config_domain_selection_service_component_name
: Der Komponentenname (ein abgeflachterComponentName
-String) für denDomainSelectionService
-Dienst
Da Android keine Apps mit von Drittanbietern herunterladbaren DomainSelectionService
-Implementierungen unterstützt, muss die App zur Domainauswahl eine System-App sein, die sich im Ordner /system_ext/priv-app/
oder /product/priv-app/
befindet. Das Framework prüft, ob der Paketname der Implementierung mit dem Wert des Geräte-Overlays übereinstimmt, damit nur vertrauenswürdige, vorinstallierte Apps gebunden werden.
Unterstützung von HAL-Funkschnittstellen
Um die Domainauswahl zu aktivieren, müssen die folgenden erforderlichen HAL-Schnittstellen für Funkschnittstellen unterstützt werden:
-
void setEmergencyMode(int serial, EmergencyMode emcModeType); void triggerEmergencyNetworkScan(int serial, EmergencyNetworkScanTrigger request); void cancelEmergencyNetworkScan(int serial, boolean resetScan); void exitEmergencyMode(int serial);
-
void emergencyNetworkScanResult(RadioIndicationType type, EmergencyRegResult result);
Zertifizierungsstufe
Führen Sie die CTS-Tests in DomainSelectionServiceTestOnMockModem
aus, um zu testen, ob das Telefonie-Framework ordnungsgemäß auf die DomainSelectionService
-Schnittstelle reagiert.