IMS implementieren

Mit Android 9 wird eine neue SystemApi-Schnittstelle namens ImsService für die Implementierung von IP Multimedia Subsystem (IMS). Die ImsService API ist ein klar definierte Schnittstelle zwischen der Android-Plattform und einem Anbieter oder die von Ihrem Mobilfunkanbieter bereitgestellte IMS-Implementierung.

ImsService-Übersicht

Abbildung 1: ImsService-Übersicht

Mithilfe der ImsService-Schnittstelle kann der IMS-Implementierer wichtige Informationen an die Plattform senden, z. B. IMS-Registrierungsinformationen, über IMS-Integration und die Integration von MmTel-Funktionen zur Bereitstellung von Sprach- und Anrufen. Die ImsService API ist auch eine Android System API, d. h., sie kann direkt mit dem Android SDK und nicht mit der Quelle erstellt. Ein IMS App, die auf dem Gerät vorinstalliert war, kann auch so konfiguriert werden, aktualisierbar im Play Store ist.

Beispiele und Quelle

Android bietet eine App auf AOSP, die Teile des ImsService API für Test- und Entwicklungszwecke Sie finden die App unter /testapps/ImsTestService.

Die Dokumentation zur ImsService API finden Sie unter ImsService und in den anderen Klassen der API.

Implementierung

Die ImsService API ist eine allgemeine API, mit der Sie IMS auf viele Arten implementieren können. je nach verfügbarer Hardware. Zum Beispiel ändert sich die Implementierung je nachdem, ob die IMS-Implementierung vollständig oder teilweise oder vollständig auf das Modem übertragen wurde. Android kann keinen öffentlichen HAL für die Auslagerung an den Basisbandprozessor bereitstellen. muss über die HAL-Erweiterung zum Modem übertragen werden.

Kompatibilität mit älteren IMS-Implementierungen

Android 9 enthält zwar die ImsService API, Geräte, die eine ältere IMS-Implementierung verwenden, können die API nicht unterstützen. Für diese Geräte wurden die älteren AIDL-Schnittstellen und Wrapper-Klassen verschoben zum Namespace android.telephony.ims.compat hinzu. Beim Upgrade auf Android 9. Bei älteren Geräten ist Folgendes erforderlich, um fortzufahren die Unterstützung der älteren API.

  • Ändern Sie den Namespace der ImsService-Implementierung so, dass er vom android.telephony.ims.compat-Namespace API.
  • Modifizieren Sie die ImsService-Dienstdefinition in AndroidManifest.xml, um die Methode android.telephony.ims.compat.ImsService Intent-Filter-Aktion anstelle von die Aktion android.telephony.ims.ImsService.

Das Framework wird dann mithilfe der Kompatibilitätsschicht an den ImsService gebunden. die in Android 9 bereitgestellt wurden, ImsService-Implementierung.

ImsService-Registrierung beim Framework

Die ImsService API ist als Dienst implementiert, was das Android-Framework an , um mit der IMS-Implementierung zu kommunizieren. Drei Schritte sind erforderlich, um eine Anwendung zu registrieren, die einen ImsService mit dem Framework. Zunächst muss sich die ImsService-Implementierung beim Plattform mit dem AndroidManifest.xml der App Zweitens muss es definieren, welche IMS-Funktionen von der Implementierung unterstützt werden (MmTel oder RCS); und drittens: Es muss als vertrauenswürdige IMS-Implementierung entweder beim Netzbetreiber Konfigurations- oder Geräte-Overlay.

Dienstdefinition

Die IMS-App registriert einen ImsService beim Framework, indem sie einen service-Eintrag in das Manifest im folgenden Format ein:

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

Die service-Definition in AndroidManifest.xml definiert Folgendes: Attribute, die für die korrekte Funktionsweise erforderlich sind:

  • directBootAware="true": Ermöglicht es, den Dienst zu erkennen und auszuführen telephony, bevor der Nutzer das Gerät entsperrt. Der Dienst hat keinen Zugriff Geräteverschlüsselung, bevor der Nutzer das Gerät entsperrt. Weitere Informationen finden Sie unter Unterstützung des Direct Boot-Modus und Dateibasierte Verschlüsselung.
  • persistent="true": Ermöglicht die dauerhafte Ausführung dieses Dienstes abgebremst wird, um Arbeitsspeicher freizugeben. Dieses Attribut funktioniert NUR, wenn das ist eine System-App.
  • permission="android.permission.BIND_IMS_SERVICE": Stellt sicher, dass nur ein Prozess, dem die Berechtigung BIND_IMS_SERVICE gewährt wurde, kann an die App binden. Dadurch wird verhindert, dass sich eine betrügerische App mit dem da nur System-Apps die Berechtigung vom Framework.

Der Dienst muss auch das Element intent-filter mit der Aktion angeben android.telephony.ims.ImsService. So kann das Framework die ImsService

IMS-Funktionsspezifikation

Nachdem der ImsService als Android-Dienst definiert wurde, AndroidManifest.xml mit dem ImsService muss definieren, welche IMS-Funktionen unterstützt werden. Android unterstützt derzeit die Funktionen MmTel und RCS, allerdings ist nur MmTel in das Framework eingebunden. Obwohl keine RCS APIs in die des Rahmenwerks, aber es hat immer noch Vorteile, es als Funktion des ImsService.

Unten sind die gültigen, in android.telephony.ims.ImsFeature definierten Merkmale aufgeführt, die kann ein ImsService eine Erklärung und ein Beispiel dafür bereitstellen, warum ein IMS App eine oder alle dieser Funktionen implementieren möchte. Nach jedem definiert ist, wird auf dieser Seite erläutert, wie ImsService die Gruppe von die für den jeweiligen SIM-Steckplatz definiert sind.

FEATURE_MMTEL

Die ImsService implementiert die IMS MMTEL-Funktion, die Unterstützung für alle IMS-Medien (IR.92- und IR.94-Spezifikationen) mit Ausnahme von Notfallgeräten an IMS PDN für Notrufe. Jegliche Implementierung von ImsService, die die MMTEL-Funktionen unterstützen, sollte die Basisklasse android.telephony.ims.MmTelFeature und gibt ein benutzerdefiniertes Implementierung von MmTelFeature in ImsService#createMmTelFeature

FUNKTION_EMERGENCY_MMTEL

Durch die Deklaration dieser Funktion wird nur der Plattform signalisiert, auf die der Notfall angewendet wird. IMS PDN für Rettungsdienste ist möglich. Wenn diese Funktion für Ihre ImsService hat, ist die Plattform immer standardmäßig auf das Circuit Switch Fallback festgelegt. für Rettungsdienste. Das Feature „FEATURE_MMTEL“ muss dafür definiert werden zu definieren.

FEATURE_RCS

Die ImsService API implementiert keine IMS-RCS-Funktionen, aber die Die Basisklasse android.telephony.ims.RcsFeature kann trotzdem nützlich sein. Das Framework Automatische Bindung an ImsService und Aufruf von ImsService#createRcsFeature wenn erkannt wird, dass das Paket RCS bereitstellen soll. Wenn die mit der SIM-Karte verknüpfte nachdem der RCS-Dienst entfernt wurde, ruft das Framework automatisch RcsFeature#onFeatureRemoved und bereinigt dann die ImsService, die mit mit der RCS-Funktion. Durch diese Funktion können einige der benutzerdefinierten Erkennungs- oder Bindungslogik, die eine RCS-Funktion bereitstellen müsste.

Registrierung unterstützter Funktionen

Das Telefonie-Framework bindet sich zuerst an ImsService, um die Funktionen abzufragen, die Verwendung der ImsService#querySupportedImsFeatures API unterstützt wird. Nach dem berechnet, welche Features der ImsService unterstützt, ruft er ImsService#create[...]Feature für jede Funktion, die der ImsService sein wird verantwortlich ist. Wenn sich die von der IMS-App unterstützten Funktionen ändern, können Sie ImsService#onUpdateSupportedImsFeatures verwenden, um das Framework die unterstützten Funktionen neu berechnen. Weitere Informationen finden Sie im folgenden Diagramm zur Initialisierung und Bindung des ImsService.

Initialisierung und Bindung von ImsService

Abbildung 2:ImsService-Initialisierung und -Bindung

Framework-Erkennung und Verifizierung einer ImsService-Implementierung

Sobald der ImsService in AndroidManifest.xml korrekt definiert wurde, wird der Plattform muss so konfiguriert sein, dass sie (sicher) an den ImsService gebunden wird, wenn angemessen sein. Es gibt zwei Arten von ImsServices, an die das Framework gebunden wird:

  1. Mobilfunkanbieter überschreiben ImsService: Diese ImsServices werden vorab in den Gerät, die jedoch mit einem oder mehreren Mobilfunkanbietern verbunden sind und nur gebunden, wenn eine passende SIM-Karte eingesetzt wird. Dies wird mit dem <ph type="x-smartling-placeholder">
  2. Gerät „Standard“ ImsService: Dies ist der ImsService-Standard, der geladen wird. von einem OEM auf das Gerät installiert und sollte so konzipiert sein, dass sie IMS-Dienste in wenn ein ImsService des Transportunternehmens nicht verfügbar ist und in in dem keine SIM-Karte oder die SIM-Karte bei denen kein ImsService vom Transportunternehmen installiert ist. Dies ist werden im Geräte-Overlay unter Verwendung der folgenden Konfigurationen definiert: <ph type="x-smartling-placeholder">

Android unterstützt keine Apps mit ImsService, der von einem Drittanbieter heruntergeladen werden kann Alle hier definierten ImsService-Implementierungen sind System-Apps und müssen sich im Verzeichnis /system/priv-app/ oder /product/priv-app/, um die entsprechenden Berechtigungen zu erteilen, d. h. Telefon, Berechtigungen für Mikrofon, Standort, Kamera und Kontakte). Indem überprüft wird, ob Der Paketname der IMS-Implementierung stimmt mit der CarrierConfig oder dem Gerät überein. Overlay-Werten hinzugefügt werden, werden nur vertrauenswürdige, vorinstallierte Apps gebunden.

Personalisierung

Apps, die einen ImsService implementieren, sind nur auf Geräten gebunden, als „überschreiben“ des Mobilfunkanbieters konfiguriert. ImsService oder Gerät „default“ ImsService-Konfigurationen für MMTEL- oder RCS-Funktionen. Mit ImsService können auch die unterstützten IMS-Funktionen (MMTEL und RCS) dynamisch durch Updates mithilfe der Methode ImsService#onUpdateSupportedImsFeatures-Methode. Dadurch wird das Framework ausgelöst, neu berechnen, welche ImsServices gebunden sind und welche Features sie unterstützen. Wenn die Die IMS-App aktualisiert das Framework ohne unterstützte Funktionen, den ImsService wird die Bindung aufgehoben, bis das Telefon neu gestartet oder eine neue SIM-Karte eingelegt wird, mit der IMS-App übereinstimmt.

Bindungspriorität für mehrere ImsService

Das Framework kann keine Bindung an alle möglichen ImsServices unterstützen, die auf dem Gerät vorinstalliert und bindet bis zu zwei ImsServices pro SIM-Steckplatz (ein ImsService für jede Funktion) in der folgenden Reihenfolge pro Element:

  1. Der durch den CarrierConfig-Wert definierte ImsService-Paketname config_ims_[mmtel/rcs]_package_override_string, wenn eine SIM-Karte vorhanden ist eingefügt.
  2. Der ImsService-Paketname, der im Geräte-Overlay-Wert für config_ims_[mmtel/rcs]_packageauch wenn es keine SIM-Karte gibt Karte eingelegt. Dieser ImsService MUSS die Notfall-MmTel-Funktion unterstützen.

Sie müssen entweder den Paketnamen Ihres ImsService in der CarrierConfig für jedes Transportunternehmen, das das Paket nutzen wird, Geräte-Overlay, wenn Ihr ImsService wie oben definiert als Standard verwendet wird.

Sehen wir uns die einzelnen Funktionen genauer an. Für ein Gerät (einzelne oder mehrere SIM-Karten) Wenn nur eine SIM-Karte eingelegt ist, sind zwei IMS-Funktionen möglich: MMTel und RCS. Das Framework versucht, die einzelnen Funktionen in der oben definierten Reihenfolge zu binden, Die Funktion ist für den im Netzbetreiber definierten ImsService nicht verfügbar. Konfigurationsüberschreibung. Das Framework greift auf Ihren standardmäßigen ImsService zurück. In der folgenden Tabelle wird beispielsweise beschrieben, welche IMS-Funktion das Framework Nutzung von drei IMS-Apps, bei denen ImsServices auf einem System implementiert ist mit den folgenden Funktionen:

  • ImsService von Mobilfunkanbieter A unterstützt RCS
  • Mobilfunkanbieter B ImsService unterstützt RCS und MMTel
  • OEM ImsService unterstützt RCS und MMTel
SIM-Karte eingelegt RCS-Funktion MMTel-Funktion
Mobilfunkanbieter A Mobilfunkanbieter A OEM
Transportunternehmen B Transportunternehmen B Transportunternehmen B
Keine SIM-Karte OEM OEM

Zertifizierungsstufe

Tools zur Überprüfung der IMS-Implementierung selbst sind nicht enthalten, da das IMS Spezifikationen sind extrem groß und erfordern spezielle Verifikationsausrüstung. Die Tests können nur verifizieren, dass das Telefonie-Framework ordnungsgemäß auf den ImsService-API

IMS-Anwendung entwickeln

Bei der Entwicklung einer IMS-App, die mit dem Android-Telefonie-Stack verknüpft ist, sollten Sie festlegen, dass die App den Status des ImsService-Instanz, die für das Abo eines bestimmten Mobilfunkanbieters angehängt ist.

Wenn Sie den Status von ImsService für MMTEL- und RCS-Funktionen abhören oder ändern möchten, verwenden Sie die ImsManager -Klasse, um eine Instanz der ImsMmTelManager ImsRcsManager oder IMS-spezifisch ProvisioningManager. . Die Anwendung kann dann den IMS-spezifischen Dienst- und Bereitstellungsstatus überwachen. Beispiele:

  • Aktivierte und verfügbare MMTEL- oder RCS-Funktionen
  • Aktualisierungen, wenn sich der IMS-Registrierungsstatus ändert
  • Bereitstellungsstatus von IMS-Features
  • Vom Nutzer aktivierte IMS-Funktionen

ImsStateCallback verwenden

Obwohl ImsService ein dauerhaft gebundener Dienst ist, Bindung geändert, wenn eine neue SIM-Karte oder ein eingebettetes Abo aktiv wird oder die Konfiguration eines Mobilfunkanbieters geändert wird. Da ImsService nicht Teil des kann es bei einer App zu unerwarteten Ausnahmen kommen, wenn sie versucht, auf IMS-APIs zuzugreifen, wenn ImsService unsichtbar abstürzt oder aufgrund von Abo- oder Konfigurationsänderung.

Auf Geräten mit Android 13 oder höher können Sie ob die ImsService-Instanz für ein verknüpftes Abo verfügbar oder nicht verfügbar ist, kann eine App den ImsStateCallback . Beim Abrufen einer Instanz von ImsMmTelManager oder ImsRcsManager die App zuerst für einen IMS-Status-Callback mithilfe von ImsMmTelManager#registerImsStateCallback oder ImsRcsManager#registerImsStateCallback Damit Sie für bestimmte Abos weiterhin Callback-Updates erhalten, wenn ImsService wieder verfügbar ist, muss die App die Registrierung aufheben oder vorhandene verwerfen Callbacks, die über ImsMmTelManager, ImsRcsManager oder ProvisioningManager; und Registrierung neuer Callbacks.

Wenn es ein Abo gibt, das IMS nicht unterstützt, ruft das Framework ImsStateCallback#onUnavailable mit dem Grund REASON_NO_IMS_SERVICE_CONFIGURED Das bedeutet, dass ImsService und die IMS-bezogenen APIs für den Abo.

Im unwahrscheinlichen Fall, dass der Telefonieprozess abstürzt, erhält die App ImsStateCallback#onError und erhält keine Updates mehr für die registrierte ImsStateCallback-Instanz. Zur Wiederherstellung aus diesem Zustand registrieren Sie die ImsStateCallback-Instanz noch einmal für verknüpftes Abo durch Aufrufen von ImsMmTelManager#registerImsStateCallback oder ImsRcsManager#registerImsStateCallback