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 przesyłanie do platformy 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 klasie 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 na urządzenie, aby umożliwić platformie wiązanie się z implementacją DomainSelectionService.

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

W tej sekcji znajdziesz więcej informacji o tych krokach.

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 mogła dział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 uruchamianiaSzyfrowanie na poziomie pliku.

  • persistent="true": pozwala na ciągłe działanie usługi i uniemożliwia jej zabicie przez system w celu odzyskania pamięci. Ten atrybut działa tylko, jeśli aplikacja jest tworzona 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ę z nią powiązać. Zapobiega to wiązaniu się z usługą przez aplikację niepożądaną, 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 na urządzeniu

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 jest zgodna z wartością nakładki urządzenia, aby mieć pewność, że są wywoływane 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.