Usługa wyboru domeny

Na urządzeniach z Androidem 15 lub nowszym możesz zaimplementować wybór domeny między usługą IMS a usługami starszymi w sieciach komutowanych komutacyjnie za pomocą interfejsu API systemu DomainSelectionService. DomainSelectionServiceto dobrze zdefiniowany interfejs między platformą Android a implementacją wyboru domen udostępnioną przez dostawcę. Ten interfejs umożliwia dostawcy przekazywanie platformie informacji sygnalizacyjnych, takich jak domena, w której realizowane są wychodzące połączenia telefoniczne i SMS-y, oraz preferowany typ sieci w skanowaniu sieci.

domain-selection-architecture

Rysunek 1. Schemat architektury funkcji wyboru domeny

Przykłady i źródło

Android udostępnia implementację referencyjną funkcji wyboru domeny w AOSP (TelephonyDomainSelectionService). Szczegółową dokumentację interfejsu DomainSelectionService znajdziesz w klasach DomainSelectionService i innych klasach interfejsu API.

Implementacja

Aby wdrożyć funkcję wyboru domeny na urządzeniu z Androidem, wykonaj te czynności:

  1. Utwórz aplikację do wybierania domen. Usługa musi być zdefiniowana w pliku AndroidManifest.xml.

  2. Dodaj konfigurację do nakładki urządzenia, aby umożliwić platformie wiązanie się z implementacją DomainSelectionService.

  3. Obsługa wymaganych interfejsów radio HAL dla funkcji wyboru domeny.

Ta sekcja zawiera więcej informacji na temat tych kroków.

Dodawanie wpisu usługi w pliku AndroidManifest.xml

Aby aplikacja do wyboru domeny zarejestrowała usługę DomainSelectionService w ramach platformy, dodaj w pliku manifestu wpis usługi w takim formacie:

<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>

Aby funkcja wyboru domeny działała, definicja usługi w pliku AndroidManifest.xml musi zawierać te atrybuty:

  • directBootAware="true": umożliwia wykrywanie usługi i jej uruchamianie przez telefonię przed odblokowaniem urządzenia przez użytkownika. Usługa nie może uzyskać dostępu do pamięci zaszyfrowanej na urządzeniu, dopóki użytkownik nie odblokuje urządzenia. Więcej informacji znajdziesz w artykułach Obsługa trybu bezpośredniego rozruchu i Szyfrowanie na podstawie plików.

  • persistent="true": umożliwia trwałe działanie usługi i nie może zostać zatrzymana przez system w celu odzyskania pamięci. Ten atrybut działa tylko wtedy, gdy aplikacja została utworzona jako aplikacja systemowa.

  • permission="android.permission.BIND_DOMAIN_SELECTION_SERVICE": zapewnia, że tylko proces, któremu przyznano uprawnienie BIND_DOMAIN_SELECTION_SERVICE, może się związać z aplikacją. Zapobiega to wiązaniu się złośliwej aplikacji z usługą, ponieważ tylko aplikacje systemowe mogą uzyskać uprawnienie w ramach tej platformy.

Usługa musi też określić element intent-filter z działaniem android.telephony.DomainSelectionService. Dzięki temu framework może znaleźć usługę DomainSelectionService.

Definiowanie konfiguracji w nakładce urządzenia

Aby platforma mogła bezpiecznie połączyć się z usługą DomainSelectionService, dodaj do nakładki urządzenia tę konfigurację:

Android nie obsługuje aplikacji z do pobrania DomainSelectionService implementacji innych firm, dlatego aplikacja do wyboru domeny musi być aplikacją systemową znajdującą się w folderze /system_ext/priv-app/ lub /product/priv-app/. Platforma sprawdza, czy nazwa pakietu implementacji odpowiada wartości nakładki na urządzeniu, aby zapewnić, że powiązane są tylko zaufane, wstępnie zainstalowane aplikacje.

Obsługa interfejsów radia HAL

Aby włączyć funkcję wyboru domeny, obsługuj te wymagane interfejsy HAL radia:

  • 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);
    

Weryfikacja

Aby sprawdzić, czy framework telefonii odpowiada prawidłowo na interfejs DomainSelectionService, uruchom testy CTS w DomainSelectionServiceTestOnMockModem.