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.
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 Aktionandroid.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ührentelephony
, 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 BerechtigungBIND_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.
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:
- 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">
- </ph>
config_ims_mmtel_package_override_string
CarrierConfig-Schlüssel für ImsServices, der MMTEL-Funktionen implementiert.config_ims_rcs_package_override_string
für ImsServices, die RCS-Funktionen implementieren.
- 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">
- </ph>
config_ims_mmtel_package
: Implementiert MMTEL-Funktionenconfig_ims_rcs_package
: Implementiert RCS-Funktionen
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:
- Der durch den CarrierConfig-Wert definierte ImsService-Paketname
config_ims_[mmtel/rcs]_package_override_string
, wenn eine SIM-Karte vorhanden ist eingefügt. - Der ImsService-Paketname, der im Geräte-Overlay-Wert für
config_ims_[mmtel/rcs]_package
auch 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