Implémenter IMS

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.

Présentation d'ImsService

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'action android.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 par telephony 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'autorisation BIND_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.

Initialisation et liaison d&#39;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:

  1. "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">
  2. 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">

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

  1. 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é.
  2. Nom de package ImsService défini dans la valeur de superposition d'appareil pour config_ims_[mmtel/rcs]_packagey 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