Android 9 introduit une nouvelle interface SystemApi appelée ImsService pour vous aider à implémenter le sous-système multimédia IP (IMS). L'API ImsService est une interface bien définie entre la plateforme Android et un fournisseur ou à l'implémentation IMS fournie par l'opérateur.
Figure 1 : Présentation d'ImsService
Grâce à l'interface ImsService, l'outil de mise en œuvre IMS peut fournir des informations de signalisation d'informations à la plate-forme, telles que les données d'inscription IMS, les SMS via l'intégration IMS, et l'intégration des fonctionnalités MmTel pour fournir des appels vocaux et vidéo appel. L'API ImsService est également une API Android System, ce qui signifie qu'elle peut être sont compilés directement avec le SDK Android, et non avec la source. Un IMS une application préinstallée sur l'appareil peuvent également être configurées pour être mises à jour sur le Play Store.
Exemples et source
Android fournit une application sur AOSP qui implémente des parties de l' API ImsService à des fins de test et de développement. Vous trouverez appli sur /testapps/ImsTestService.
Vous trouverez la documentation de l'API ImsService dans ImsService et les autres classes de l'API.
Implémentation
L'API ImsService est une API de haut niveau qui vous permet d'implémenter IMS de nombreuses façons, en fonction du matériel disponible. Par exemple, l'implémentation change selon que l'implémentation de l'IMS est entièrement effectuée sur l'application ou non ou s'il est partiellement ou entièrement déchargé sur le modem. Android ne pas fournir de HAL publique pour le déchargement vers le processeur de bande de base, le déchargement doit avoir lieu en utilisant votre extension HAL sur le modem.
Compatibilité avec les anciennes implémentations de messagerie instantanée
Bien qu'Android 9 inclue l'API ImsService,
les appareils utilisant une mise en œuvre plus ancienne pour IMS ne prennent pas en charge l'API.
Pour ces appareils, les anciennes interfaces et classes de wrappers AIDL ont été déplacées
à l'espace de noms android.telephony.ims.compat
. Lors de la mise à niveau vers Android
9, les appareils plus anciens doivent procéder comme suit pour continuer
la prise en charge de l'ancienne API.
- Modifiez l'espace de noms de l'implémentation ImsService pour l'étendre à partir du
API d'espace de noms
android.telephony.ims.compat
. - Modifiez la définition du service ImsService dans le fichier AndroidManifest.xml pour utiliser la
android.telephony.ims.compat.ImsService
action de filtre d'intent, au lieu de l'actionandroid.telephony.ims.ImsService
.
Le framework sera ensuite lié à ImsService à l'aide de la couche de compatibilité
fournies par Android 9 pour qu'elles fonctionnent
Implémentation de ImsService
.
Enregistrement ImsService avec le framework
L'API ImsService est implémentée en tant que service, ce que le framework Android
se lie pour communiquer
avec l'implémentation IMS. Trois étapes sont
nécessaire pour enregistrer une application qui implémente un ImsService avec
d'infrastructure. Tout d'abord, l'implémentation ImsService doit s'enregistrer auprès du
plate-forme à l'aide du AndroidManifest.xml
de l'application. deuxièmement, il doit
définir les fonctionnalités IMS compatibles avec l'implémentation (MmTel ou RCS) ; et troisièmement,
il doit être validé comme implémentation IMS fiable
configuration ou superposition d'appareil.
Définition de service
L'application IMS enregistre un ImsService avec le framework en ajoutant un
L'entrée service
dans le fichier manifeste au format suivant:
<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>
La définition service
dans AndroidManifest.xml
définit les éléments suivants :
nécessaires au bon fonctionnement:
directBootAware="true"
: autorise la détection et l'exécution du service partelephony
avant que l'utilisateur déverrouille l'appareil. Le service ne peut pas accéder stockage chiffré par l'appareil avant que l'utilisateur ne déverrouille l'appareil. Pour plus pour en savoir plus, consultez Prendre en charge le mode Démarrage direct et Chiffrement basé sur les fichiers.persistent="true"
: permet d'exécuter ce service de manière persistante et de ne pas être tuées par le système pour récupérer de la mémoire. Cet attribut fonctionne UNIQUEMENT si est conçue comme une application système.permission="android.permission.BIND_IMS_SERVICE"
: garantit que seul un un processus disposant de l'autorisationBIND_IMS_SERVICE
lier à l'application. Cela permet d'éviter qu'une application non autorisée ne soit liée à car seules les applications système peuvent obtenir l'autorisation d'infrastructure.
Le service doit également spécifier l'élément intent-filter
avec l'action
android.telephony.ims.ImsService
Cela permet au framework de trouver
ImsService
Spécification des fonctionnalités IMS
Une fois qu'ImsService a été défini comme service Android dans AndroidManifest.xml, ImsService doit définir les fonctionnalités IMS compatibles. Android est actuellement compatible avec les fonctionnalités MmTel et RCS, mais seul MmTel est intégrés au framework. Bien que les API RCS ne soient pas intégrées dans le framework, il y a tout de même des avantages à la déclarer comme caractéristique ImsService.
Vous trouverez ci-dessous les caractéristiques valides définies dans android.telephony.ims.ImsFeature
qui
qu'un ImsService peut fournir, ainsi qu'une explication et un exemple de la raison pour laquelle un service IMS
de votre application souhaite mettre
en œuvre l'une ou la totalité de ces fonctionnalités. Après chaque
est définie, cette page explique comment ImsService
déclare l'ensemble de
les caractéristiques qu'il définit
pour chaque emplacement SIM.
FONCTIONNALITÉ_MMTEL
Le ImsService
implémente la fonctionnalité IMS MMTEL, qui permet de prendre en charge
tous les supports IMS (spécifications IR.92 et IR.94), à l'exception de l'association d'urgence
PDN IMS pour les appels d'urgence. Toute implémentation de ImsService
qui souhaite
prendre en charge les fonctionnalités MMTEL
devrait étendre le
android.telephony.ims.MmTelFeature
et renvoie une valeur
Implémentation de MmTelFeature
dans
ImsService#createMmTelFeature
FONCTIONNALITÉ_EMERGENCY_MMTEL
Déclarer cette fonctionnalité n'indique à la plate-forme que la connexion d'urgence
Le numéro PDN IMS pour les services d'urgence est possible. Si cette fonctionnalité n'est pas déclarée pour
votre ImsService
, la plate-forme utilisera toujours par défaut le commutateur de circuit de remplacement.
pour les services d'urgence. Pour ce faire, vous devez définir la fonctionnalité FEATURE_MMTEL
.
caractéristique à définir.
FONCTIONNALITÉ_RCS
L'API ImsService n'implémente aucune fonctionnalité RCS IMS, mais
La classe de base android.telephony.ims.RcsFeature
peut toujours être utile. Le cadre
se lie automatiquement à ImsService et appelle ImsService#createRcsFeature
lorsqu'il détecte que le package doit fournir le RCS. Si la carte SIM associée
avec le service RCS, le framework appelle automatiquement
RcsFeature#onFeatureRemoved
, puis nettoie le ImsService
associé
avec la fonctionnalité RCS. Cette fonctionnalité peut supprimer certaines
de détection ou de liaison qu'une fonctionnalité RCS aurait dû fournir autrement.
Enregistrement de fonctionnalités compatibles
Telephony Framework se lie d'abord à ImsService pour interroger les caractéristiques
compatible avec l'API ImsService#querySupportedImsFeatures
. Après le
calcule les fonctionnalités compatibles avec ImsService, il appelle
ImsService#create[...]Feature
pour chaque fonctionnalité que le service ImsService sera
responsable. Si les fonctionnalités prises en charge par l'application IMS changent, vous
vous pouvez utiliser ImsService#onUpdateSupportedImsFeatures
pour signaler au framework
recalculer les caractéristiques prises en charge. Pour en savoir plus, consultez le schéma suivant
sur l'initialisation et la liaison d'ImsService.
Figure 2:Initialisation et liaison d'ImsService
Détection de framework et vérification d'une implémentation ImsService
Une fois ImsService correctement défini dans AndroidManifest.xml, la plate-forme doit être configurée pour établir une liaison (de manière sécurisée) avec ImsService lorsque approprié. Le framework se lie à deux types d'ImsServices:
- "Remplacement" par l'opérateur ImsService: ces services ImsServices sont préchargés sur le
mais qui sont associés à un ou plusieurs opérateurs mobiles et ne seront
lié lorsqu'une carte SIM correspondante est insérée. Pour ce faire, vous devez utiliser
<ph type="x-smartling-placeholder">
- </ph>
config_ims_mmtel_package_override_string
Clé CarrierConfig pour ImsServices qui implémente les fonctionnalités MMTEL.config_ims_rcs_package_override_string
pour ImsServices implémentant les fonctionnalités RCS.
- Appareil "par défaut" ImsService: il s'agit du service ImsService par défaut chargé
sur l'appareil par un OEM. Elles doivent être conçues pour fournir des services IMS
toutes les situations où un opérateur ImsService n'est pas disponible et est utile dans
situations où aucune carte SIM n'est insérée dans l'appareil
n'est associé à aucun opérateur ImsService. C'est
définie dans la superposition de l'appareil à l'aide des configurations suivantes:
<ph type="x-smartling-placeholder">
- </ph>
config_ims_mmtel_package
: Implémentation des fonctionnalités MMTELconfig_ims_rcs_package
: Implémentation des fonctionnalités RCS
Android n'accepte pas les applications avec ImsService téléchargeable par un tiers. Les implémentations d'ImsService définies ici sont donc doit être une application système et doit se trouver dans le répertoire /system/priv-app/ ou /product/priv-app/ pour accorder les autorisations appropriées (à savoir, téléphone, autorisations d'accès au micro, à la position, à l'appareil photo et aux contacts). En vérifiant si le nom du package de l'implémentation IMS correspond à CarrierConfig ou à l'appareil de superposition définies ci-dessus, seules les applications approuvées et préinstallées sont liés.
Personnalisation
Les applications qui implémentent un ImsService ne sont liées qu'aux appareils sur lesquels elles
sont configurés
comme étant des "remplacements", ImsService ou appareil "par défaut"
Configurations ImsService pour la fonctionnalité MMTEL ou RCS.
ImsService autorise également les fonctionnalités IMS compatibles (MMTEL et RCS) à
être activées ou désactivées de façon dynamique à l'aide de mises à jour
ImsService#onUpdateSupportedImsFeatures
. Cela déclenche le framework
recalculez les ImsServices qui sont liés et les fonctionnalités qu'ils prennent en charge. Si le
L'application IMS met à jour le framework sans aucune fonctionnalité prise en charge, le service ImsService
est dissociée jusqu'à ce que le téléphone soit redémarré ou qu'une nouvelle carte SIM soit insérée
correspond à l'application IMS.
Priorité de liaison pour plusieurs ImsService
Le framework ne peut pas prendre en charge la liaison à tous les ImsServices possibles qui sont préchargé sur l'appareil et seront associés à un maximum de deux ImsServices par emplacement SIM (un ImsService pour chaque fonctionnalité) dans l'ordre suivant et pour chaque fonctionnalité:
- Nom du package ImsService défini par la valeur CarrierConfig
config_ims_[mmtel/rcs]_package_override_string
lorsqu'il y a une carte SIM inséré. - Nom de package ImsService défini dans la valeur de superposition d'appareil pour
config_ims_[mmtel/rcs]_package
y compris si aucune carte SIM n'est présente carte insérée. Ce service ImsService DOIT être compatible avec la fonctionnalité MmTel d'urgence.
Le nom du package de votre service ImsService doit être défini dans le champ CarrierConfig pour chacun des transporteurs qui utiliseront ce colis ou dans le d'appareil si vous utilisez ImsService par défaut, comme indiqué ci-dessus.
Décomposons cela pour chaque caractéristique. Pour un appareil (avec une ou plusieurs cartes SIM) avec une seule carte SIM chargée, deux fonctionnalités IMS sont possibles: MMTel et RCS. Le framework va essayer de respecter l'ordre défini ci-dessus pour chaque fonctionnalité. si la fonctionnalité n'est pas disponible pour l'opérateur ImsService défini dans le champ Si vous remplacez la configuration, le framework reviendra à votre ImsService par défaut. Ainsi, par exemple, le tableau ci-dessous décrit la fonctionnalité IMS que le framework utiliser trois applications IMS implémentant ImsServices installées sur un système avec les fonctionnalités suivantes:
- Le service ImsService de l'opérateur A est compatible avec le protocole RCS.
- L'opérateur B ImsService est compatible avec les RCS et MMTel
- ImsService de l'OEM compatible avec les RCS et MMTel
Carte SIM insérée | Fonctionnalité RCS | Fonctionnalité MMTel |
---|---|---|
Opérateur A | Opérateur A | OEM |
Opérateur B | Opérateur B | Opérateur B |
Aucune carte SIM | OEM | OEM |
Validation
Les outils permettant de vérifier l'implémentation IMS proprement dite ne sont pas inclus puisque l'IMS les spécifications sont extrêmement lourdes et utilisent un équipement de vérification spécial. La peuvent uniquement vérifier que Telephony Framework répond correctement aux API ImsService.
Développer une application IMS
Lors du développement d'une application IMS qui interagit avec la pile téléphonique Android, nous vous recommandons de spécifier que l'application peut écouter ou modifier l'état Instance ImsService associée à un abonnement auprès d'un opérateur spécifique.
Pour écouter ou modifier l'état d'ImsService pour les fonctionnalités MMTEL et RCS, utilisez
la
ImsManager
pour obtenir une instance
ImsMmTelManager
ImsRcsManager
ou à l'IMS
ProvisioningManager
. L'application peut ensuite écouter les états de service et de provisionnement spécifiques à IMS.
par exemple:
- Fonctionnalités MMTEL ou RCS activées et disponibles
- Mises à jour lorsque l'état de l'enregistrement IMS change
- État du provisionnement des fonctionnalités IMS
- Fonctionnalités IMS activées par l'utilisateur
Utiliser ImsStateCallback
Bien qu'ImsService soit un service lié de manière persistante, le service liée peut changer lorsqu'une nouvelle carte SIM ou un nouvel abonnement intégré devient actif. ou en cas de modification de la configuration d'un opérateur. Étant donné qu'ImsService ne fait pas partie de téléphonie, une application peut rencontrer des exceptions imprévues lors de la tentative pour accéder aux API IMS si ImsService plante de manière invisible ou n'est pas lié en cas de changement d'abonnement ou de configuration.
Sur les appareils équipés d'Android 13 ou version ultérieure, pour surveiller
si l'instance ImsService d'un abonnement associé est
disponible ou indisponible, une application peut utiliser
ImsStateCallback
. Lors de l'obtention d'une instance de ImsMmTelManager
ou de ImsRcsManager
, nous
recommandez que l'application s'enregistre d'abord pour un rappel d'état IMS à l'aide de
ImsMmTelManager#registerImsStateCallback
ou
ImsRcsManager#registerImsStateCallback
.
Pour continuer à recevoir des notifications de rappel pour des abonnements spécifiques lorsque
ImsService redevient disponible, l'application doit annuler l'enregistrement ou supprimer le service
les rappels enregistrés via ImsMmTelManager
, ImsRcsManager
ou
ProvisioningManager
; et enregistrer de nouveaux rappels.
Si un abonnement n'est pas compatible avec IMS, le framework appelle
ImsStateCallback#onUnavailable
avec la raison
REASON_NO_IMS_SERVICE_CONFIGURED
Cela signifie qu'ImsService et les API liées à IMS ne sont pas disponibles
abonnement.
Dans le cas peu probable où le processus de téléphonie plante, l'application reçoit
ImsStateCallback#onError
et ne reçoit plus de mises à jour sur l'instance ImsStateCallback
enregistrée.
Pour récupérer de cette condition, réenregistrez l'instance ImsStateCallback
pour
l'abonnement associé en appelant
ImsMmTelManager#registerImsStateCallback
ou
ImsRcsManager#registerImsStateCallback