Dienst zur Domainauswahl

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.

domain-selection-architecture

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:

  1. Erstellen Sie eine Domainauswahl-App. Der Dienst muss in der Datei AndroidManifest.xml definiert sein.

  2. Fügen Sie dem Geräte-Overlay eine Konfiguration hinzu, damit die Plattform an die DomainSelectionService-Implementierung gebunden werden kann.

  3. 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 Berechtigung BIND_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:

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:

  • IRadioNetwork

    void setEmergencyMode(int serial, EmergencyMode emcModeType);
    void triggerEmergencyNetworkScan(int serial,
            EmergencyNetworkScanTrigger request);
    void cancelEmergencyNetworkScan(int serial, boolean resetScan);
    void exitEmergencyMode(int serial);
    
  • IRadioNetworkIndication

    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.