Na urządzeniach z Androidem 15 lub nowszym możesz wdrożyć wybór domeny między usługą IMS a usługami starszego typu w sieciach komutowanych za pomocą interfejsu API systemu DomainSelectionService. DomainSelectionService
jest dobrze zdefiniowanym interfejsem między platformą Android a dostarczoną przez dostawcę implementacją wyboru domeny. Ten interfejs umożliwia implementacji dostawcy przekazywanie do platformy informacji o sygnalizacji, takich jak domena, w której są wykonywane połączenia wychodzące i wysyłane SMS-y, oraz preferowany typ sieci podczas skanowania sieci.
Rysunek 1. Diagram architektury funkcji wyboru domeny
Przykłady i źródło
Android udostępnia referencyjną implementację funkcji wyboru domeny w ramach Projektu Android Open Source (AOSP) pod adresem TelephonyDomainSelectionService.
Szczegółową dokumentację interfejsu DomainSelectionService API znajdziesz w DomainSelectionService i innych klasach w interfejsie API.
Implementacja
Aby wdrożyć funkcję wyboru domeny na urządzeniu z Androidem, wykonaj te czynności:
Utwórz aplikację do wyboru domeny. Usługa musi być zdefiniowana w pliku
AndroidManifest.xml.Dodaj konfigurację do nakładki urządzenia, aby umożliwić platformie powiązanie z implementacją
DomainSelectionService.Obsługuj wymagane interfejsy warstwy abstrakcji sprzętu radiowego (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 DomainSelectionService usługę w ramach platformy, dodaj wpis usługi w pliku manifestu w tym 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>
Definicja usługi w AndroidManifest.xml musi zawierać te atrybuty, aby funkcja wyboru domeny działała:
directBootAware="true": umożliwia wykrywanie i uruchamianie usługi przez telefon przed odblokowaniem urządzenia przez użytkownika. Usługa nie ma dostępu do zaszyfrowanej pamięci urządzenia, dopóki użytkownik nie odblokuje urządzenia. Więcej informacji znajdziesz w artykułach Obsługa trybu bezpośredniego uruchamiania i Szyfrowanie oparte na plikach.persistent="true": umożliwia ciągłe działanie usługi i zapobiega jej zamknięciu przez system w celu odzyskania pamięci. Ten atrybut działa tylko wtedy, gdy aplikacja jest aplikacją systemową.permission="android.permission.BIND_DOMAIN_SELECTION_SERVICE": weryfikuje, czy tylko proces, który ma przyznane uprawnienieBIND_DOMAIN_SELECTION_SERVICE, może powiązać się z aplikacją. Zapobiega to powiązaniu się z usługą nieuczciwej aplikacji, ponieważ tylko aplikacje systemowe mogą uzyskać to uprawnienie od platformy.
Usługa musi też określić element intent-filter z działaniem android.telephony.DomainSelectionService. Dzięki temu platforma może znaleźć usługę DomainSelectionService.
Definiowanie konfiguracji w nakładce urządzenia
Aby platforma mogła bezpiecznie powiązać się z usługą DomainSelectionService, dodaj do nakładki urządzenia tę konfigurację:
config_domain_selection_service_component_name: nazwa komponentu (spłaszczony ciąg znakówComponentName) usługiDomainSelectionService.
Android nie obsługuje aplikacji z implementacjami pobieranymi przez inne firmy, dlatego aplikacja do wyboru domeny musi być aplikacją systemową znajdującą się w folderze /system_ext/priv-app/ lub /product/priv-app/.DomainSelectionService Platforma sprawdza, czy nazwa pakietu implementacji jest zgodna z wartością nakładki urządzenia, aby mieć pewność, że powiązane są tylko zaufane, wstępnie zainstalowane aplikacje.
Obsługa interfejsów HAL radia
Aby włączyć funkcję wyboru domeny, musisz obsługiwać te wymagane interfejsy HAL radia:
-
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);
Weryfikacja
Aby sprawdzić, czy platforma telefoniczna prawidłowo reaguje na interfejs DomainSelectionService, uruchom testy pakietu CTS (Compatibility Test Suite) w DomainSelectionServiceTestOnMockModem.