Wdróż IMS

W Androidzie 9 wprowadziliśmy nowy interfejs SystemApi o nazwie ImsService , który pomoże Ci wdrożyć podsystem multimedialny IP (IMS). ImsService API to dobrze zdefiniowany interfejs między platformą Androida a dostawcą lub IMS udostępniany przez operatora.

Omówienie usługi ImsService

Rysunek 1. Omówienie usługi ImsService

Za pomocą interfejsu ImsService Implementator IMS może dostarczyć ważne przekazywanie informacji platformie, takich jak dane rejestracyjne IMS, SMS-y integracji komunikatora i MmTel, a także integracji funkcji MmTel w celu dostarczania połączeń głosowych i wideo połączenia. ImsService API jest również interfejsem Android System API, co oznacza, że może utworzonych w pakiecie SDK na Androida, a nie w źródle. komunikatora Aplikacja wstępnie zainstalowana na urządzeniu można też skonfigurować tak, być aktualizowany.

Przykłady i źródło

W usłudze AOSP na Androida dostępna jest aplikacja, która wykorzystuje fragmenty Interfejs ImsService API do testowania i programowania. Dodatkowe informacje na temat aplikację na /testapps/ImsTestService

Dokumentację interfejsu ImsService API znajdziesz w ImsService a także w innych klasach w interfejsie API.

Implementacja

ImsService API to interfejs API wysokiego poziomu, który pozwala wdrażać IMS na wiele sposobów, w zależności od dostępnego sprzętu. Na przykład wprowadzenie zmiany w zależności od tego, czy implementacja IMS jest w pełni związana z aplikacją, lub jest częściowo lub całkowicie odciążony od modemu. Android nie udostępniać publicznej zawartości HAL do odciążania procesora pasma podstawowego, więc muszą zostać przeciążone za pomocą rozszerzenia HAL do modemu.

Zgodność ze starszymi implementacjami IMS

Chociaż Android 9 obejmuje interfejs ImsService API, urządzenia korzystające ze starszej implementacji IMS nie będą obsługiwać tego interfejsu API. W przypadku tych urządzeń starsze interfejsy AIDL i klasy kodu zostały przeniesione do przestrzeni nazw android.telephony.ims.compat. Po przejściu na Androida 9, starsze urządzenia muszą wykonać te czynności, aby kontynuować i stara wersja interfejsu API.

  • Zmień przestrzeń nazw implementacji ImsService, aby rozszerzyć ją z Interfejs API przestrzeni nazw android.telephony.ims.compat.
  • Zmodyfikuj definicję usługi ImsService w pliku AndroidManifest.xml, aby używać atrybutu android.telephony.ims.compat.ImsService działanie filtra intencji, a nie działanie android.telephony.ims.ImsService.

Platforma połączy się z ImsService za pomocą warstwy zgodności są dostępne w Androidzie 9 i działają ze starszymi Implementacja ImsService.

Rejestracja ImsService za pomocą platformy

Interfejs ImsService API jest implementowany jako usługa, której platforma Android wiąże się z, aby komunikować się z implementacją IMS. Wystarczą 3 kroki: konieczne do zarejestrowania aplikacji, która implementuje ImsService za pomocą platformy. Po pierwsze, implementacja ImsService musi zarejestrować się w parametrze platformy korzystającej z elementu AndroidManifest.xml aplikacji; po drugie, określać, które funkcje IMS są obsługiwane przez implementację (MmTel lub RCS); Po trzecie, musi zostać zweryfikowany jako zaufany dostawca IMS u operatora konfiguracji lub nakładki urządzenia.

Definicja usługi

Aplikacja IMS rejestruje usługę ImsService za pomocą platformy, dodając do niej service wpis w pliku manifestu w tym formacie:

<service
    android:name="com.egcorp.ims.EgImsService"
    android:directBootAware="true"
    Android:persistent="true"
    ...
    android:permission="android.permission.BIND_IMS_SERVICE" >
    ...
    <intent-filter>
        <action android:name="android.telephony.ims.ImsService" />
    </intent-filter>
</service>

Definicja service w AndroidManifest.xml definiuje te elementy Atrybuty, które są niezbędne do prawidłowego działania:

  • directBootAware="true": umożliwia wykrywanie i uruchamianie usługi przez telephony, zanim użytkownik odblokuje urządzenie. Usługa nie ma dostępu szyfrowane urządzenie, zanim użytkownik odblokuje urządzenie. Więcej Więcej informacji zawiera Obsługa trybu bezpośredniego rozruchu oraz Szyfrowanie oparte na plikach.
  • persistent="true": umożliwia trwałe uruchamianie tej usługi, zabitego przez system, żeby odzyskać pamięć. Ten atrybut działa TYLKO wtedy, gdy atrybut jest przeznaczona do aplikacji systemowej.
  • permission="android.permission.BIND_IMS_SERVICE": zapewnia, że tylko proces, do którego przyznano uprawnienie BIND_IMS_SERVICE, może powiązane z aplikacją. Zapobiega to wiązaniu się nieuczciwej aplikacji z usługi, ponieważ tylko aplikacje systemowe mogą otrzymać te uprawnienia platformy.

Usługa musi również określać element intent-filter z działaniem. android.telephony.ims.ImsService Dzięki temu platforma może znaleźć ImsService

Specyfikacja funkcji IMS

Po zdefiniowaniu usługi ImsService jako usługi dla Androida w AndroidManifest.xml, ImsService musi określać, które funkcje IMS są obsługiwane. Android obecnie obsługuje funkcje MmTel i RCS, ale tylko MmTel zintegrowane z platformą. Chociaż nie ma zintegrowanych interfejsów RCS API platformy, nadal ma on zalety zadeklarowanie go jako funkcji ImsService

Poniżej znajdują się prawidłowe funkcje zdefiniowane w android.telephony.ims.ImsFeature, które: ImsService może podać i wyjaśnić, dlaczego dany komunikator będzie stosować jedną lub wszystkie z tych funkcji. Po każdym funkcja jest zdefiniowana, ale na tej stronie znajdziesz informacje o tym, jak ImsService deklaruje zestaw właściwości każdego gniazda karty SIM.

FUNKCJA_MMTEL

ImsService implementuje funkcję IMS MMTEL, która obsługuje wszystkie multimedia IMS (specyfikacje IR.92 i IR.94) oprócz sytuacji awaryjnych IMS PDN na potrzeby połączeń alarmowych. Każda implementacja ImsService, która chce obsługujące funkcje MMTEL powinny rozszerzyć android.telephony.ims.MmTelFeature klasy bazowej i zwracają niestandardową Wdrożenie MmTelFeature w: ImsService#createMmTelFeature

FEATURE_EMERGENCY_MMTEL

Zadeklarowanie tej funkcji spowoduje tylko przekazanie przez platformę informacji, które w sytuacji awaryjnej dołączają do IMS PDN na potrzeby służb ratunkowych jest możliwy. Jeśli ta funkcja nie została zadeklarowana dla ImsService, platforma zawsze będzie domyślnie używać awaryjnego przełącznika obwodu służb ratunkowych. W przypadku tego elementu należy zdefiniować funkcję FEATURE_MMTEL do zdefiniowania.

FUNKCJA_RCS

Interfejs ImsService API nie implementuje żadnych funkcji RCS IMS, ale Klasa bazowa android.telephony.ims.RcsFeature może być nadal przydatna. Struktura automatycznie łączy się z ImsService i wywołuje ImsService#createRcsFeature gdy wykryje, że przesyłka powinna obsługiwać protokół RCS. Jeśli powiązana karta SIM gdy usługa RCS zostanie usunięta, platforma automatycznie wywoła RcsFeature#onFeatureRemoved, a następnie czyści powiązane dane (ImsService) z funkcją RCS. Ta funkcja może usunąć niektóre niestandardowe lub logikę wykrywania bądź wiązania, którą musiałaby zapewnić funkcja RCS.

Rejestracja obsługiwanych funkcji

Platforma telekomunikacyjna najpierw łączy się z ImsService, aby umożliwić wysyłanie zapytań o funkcje, który obsługuje interfejs ImsService#querySupportedImsFeatures API. Po oblicza funkcje obsługiwane przez ImsService, ImsService#create[...]Feature dla każdej funkcji, którą będzie ImsService za który ponosimy odpowiedzialność. Jeśli funkcje obsługiwane przez aplikację IMS ulegną zmianie, za pomocą pola ImsService#onUpdateSupportedImsFeatures może zasygnalizować platformę i przeliczyć obsługiwane funkcje. Więcej informacji znajdziesz na schemacie poniżej na zainicjowaniu i powiązaniu usługi ImsService.

Inicjowanie i powiązanie ImsService

Rysunek 2. Inicjowanie i powiązanie ImsService

Wykrywanie i weryfikacja platformy ImsService

Po prawidłowym zdefiniowaniu ImsService w pliku AndroidManifest.xml atrybut należy skonfigurować (bezpiecznie) powiązanie platformy z ImsService, gdy odpowiednie. Platforma łączy 2 typy ImsServices:

  1. „Zastąp” operatora ImsService: te usługi ImsServices są wstępnie wczytywane na jest połączone z co najmniej jednym operatorem i będzie wiązane po włożeniu odpowiedniej karty SIM. Do konfiguracji służy
  2. Urządzenie „domyślne” ImsService: domyślna wczytywana usługa ImsService przez OEM i powinien być zaprojektowany do świadczenia usług IMS. w przypadku, gdy usługa ImsService nie jest dostępna i przydaje się sytuacje, gdy w urządzeniu nie ma karty SIM ani karty SIM nie ma zainstalowanej usługi ImsService operatora. To jest zdefiniowane w nakładce urządzenia przy użyciu następujących konfiguracji:

Android nie obsługuje aplikacji, w których można pobrać usługę ImsService innej firmy więc wszystkie zdefiniowane tutaj implementacje ImsService są być aplikacjami systemowymi i muszą znajdować się w katalogu /system/priv-app/ lub /product/priv-app/, aby przyznać odpowiednie uprawnienia (np. telefon, dostęp do mikrofonu, lokalizacji, aparatu i kontaktów). Poprzez sprawdzenie, czy nazwa pakietu implementacji IMS jest zgodna z kartą CarrierConfig lub urządzeniem zdefiniowanych powyżej wartości nakładanych, tylko zaufane, wstępnie zainstalowane aplikacje związane.

Dostosowywanie

Aplikacje implementujące ImsService są powiązane tylko na urządzeniach, na których są skonfigurowane jako „zastąpienie” operatora. ImsService lub urządzenie „default” Konfiguracje ImsService na potrzeby funkcji MMTEL lub RCS. ImsService umożliwia również korzystanie z obsługiwanych funkcji IMS (MMTEL i RCS) można włączać i wyłączać dynamicznie za pomocą aktualizacji Metoda ImsService#onUpdateSupportedImsFeatures. Powoduje to, że platforma ponownie obliczać, które ImsServices są powiązane i obsługiwane funkcje. Jeśli Aplikacja IMS aktualizuje platformę bez obsługiwanych funkcji, ImsService powiązanie zostanie usunięte do czasu ponownego uruchomienia telefonu lub włożenia nowej karty SIM; pasuje do aplikacji IMS.

Priorytet powiązania dla wielu usług ImsService

Platforma nie obsługuje powiązań ze wszystkimi możliwymi usługami ImsServices, które są wstępnie załadowana na urządzenie i powiązana z maksymalnie 2 usługami ImsServices na gniazdo karty SIM (jedna usługa ImsService na każdą funkcję) w następującej kolejności, z uwzględnieniem poszczególnych cech:

  1. Nazwa pakietu ImsService zdefiniowana przez wartość CarrierConfig config_ims_[mmtel/rcs]_package_override_string, gdy w urządzeniu jest karta SIM wstawione.
  2. Nazwa pakietu ImsService zdefiniowana w wartości nakładki na urządzeniu dla config_ims_[mmtel/rcs]_packagew tym w przypadku, gdy nie ma karty SIM włożono kartę. Ta usługa ImsService MUSI obsługiwać funkcję połączeń alarmowych.

Musisz mieć nazwę pakietu ImsService zdefiniowaną w CarrierConfig dla każdego przewoźnika, który użyje danego pakietu, lub w na urządzeniu, jeśli usługa ImsService będzie domyślna, zgodnie z definicją powyżej.

Przeanalizujmy każdą z tych cech. Do urządzenia (pojedyncza lub z wieloma kartami SIM) w przypadku jednej karty SIM są dostępne 2 funkcje IMS: MMTel i RCS. Platforma spróbuje utworzyć powiązanie w określonej powyżej kolejności dla każdej funkcji oraz jeśli funkcja nie jest dostępna dla usługi ImsService zdefiniowanej u operatora przesłonięcie konfiguracji, platforma w zastępstwie będzie korzystać z domyślnej usługi ImsService. Na przykład w tabeli poniżej opisano, z której funkcji IMS będzie korzystać platforma użycie danych z 3 aplikacji IMS implementujących funkcje ImsServices zainstalowane w systemie z tymi funkcjami:

  • Operator A ImsService obsługuje RCS
  • Operator B ImsService obsługuje RCS i MMTel
  • ImsService OEM obsługuje RCS i MMTel
Włożono kartę SIM Funkcja RCS Funkcja MMTel
Przewoźnik A Przewoźnik A OEM
Przewoźnik B Przewoźnik B Przewoźnik B
Brak karty SIM OEM OEM

Weryfikacja

Narzędzia do weryfikacji samej implementacji IMS nie zostały uwzględnione, są bardzo duże i wymagają specjalnego sprzętu do weryfikacji. mogą jedynie sprawdzić, czy platforma telefoniczna prawidłowo reaguje na Interfejs API ImsService.

Programowanie aplikacji IMS

Podczas tworzenia aplikacji IMS, która współpracuje ze stosem telefonów z Androidem, zalecamy określenie, że aplikacja może nasłuchiwać lub modyfikować stan Instancja ImsService dołączona do subskrypcji określonego operatora.

Aby nasłuchiwać lub modyfikować stan ImsService na potrzeby funkcji MMTEL i RCS, użyj ImsManager klasy, aby pobrać instancję ImsMmTelManager, ImsRcsManager lub konkretnego komunikatora ProvisioningManager zajęcia. Aplikacja może wtedy nasłuchiwać stanów usługi i udostępniania specyficznych dla IMS Na przykład:

  • Włączone i dostępne funkcje MMTEL i RCS
  • Aktualizacje po zmianie stanu rejestracji IMS
  • Stan obsługi administracyjnej funkcji IMS
  • Funkcje IMS włączone przez użytkownika

Użyj funkcji ImsStateCallback

Chociaż ImsService jest trwale powiązaną usługą, która Wartość granica może się zmienić, gdy nowa karta SIM lub osadzona subskrypcja stanie się aktywna lub gdy konfiguracja operatora się zmieni. Ponieważ ImsService nie jest częścią przez telefon, w aplikacji mogą wystąpić nieprzewidziane wyjątki aby uzyskać dostęp do interfejsów IMS, jeśli usługa ImsService ulegnie niewidocznej awarii lub będzie niepowiązana z powodu subskrypcji lub konfiguracji.

na urządzeniach z Androidem 13 lub nowszym w celu monitorowania czy instancja ImsService dla powiązanej subskrypcji jest dostępna lub niedostępna, aplikacja może używać ImsStateCallback zajęcia. Gdy pobieramy instancję ImsMmTelManager lub ImsRcsManager, zalecamy, aby aplikacja najpierw zarejestrowała się dla wywołania zwrotnego stanu IMS za pomocą ImsMmTelManager#registerImsStateCallback. lub ImsRcsManager#registerImsStateCallback Aby nadal otrzymywać aktualizacje oddzwaniania dla konkretnych subskrypcji, gdy Usługa ImsService stanie się ponownie dostępna. Aplikacja musi wyrejestrować lub odrzucić istniejącą wywołania zwrotne zarejestrowane przez ImsMmTelManager, ImsRcsManager lub ProvisioningManager; i rejestrować nowe wywołania zwrotne.

Jeśli istnieje subskrypcja, która nie obsługuje IMS, platforma wywołuje ImsStateCallback#onUnavailable podając przyczynę, REASON_NO_IMS_SERVICE_CONFIGURED Oznacza to, że ImsService ani związane z IMS interfejsy API nie są dostępne dla subskrypcji.

W mało prawdopodobnym przypadku awarii procesu telefonicznego aplikacja odbiera ImsStateCallback#onError i nie otrzymuje już aktualizacji w zarejestrowanej instancji ImsStateCallback. Aby rozwiązać problem po spełnieniu tego warunku, ponownie zarejestruj instancję ImsStateCallback dla powiązanej subskrypcji, wywołując ImsMmTelManager#registerImsStateCallback. lub ImsRcsManager#registerImsStateCallback