Android 9 fournit des API pour mieux prendre en charge les applications d'appel tierces (3P). Les applications d'appels 3P s'appuient généralement sur des API de téléphonie telles que la diffusion PHONE_STATE
pour coexister avec les appels téléphoniques de l'opérateur. En conséquence, les applications d'appels 3P doivent donner la priorité aux appels de l'opérateur et ont souvent recours au rejet silencieux des appels entrants dans l'application, ou à la fin d'un appel en cours pour laisser la place à un appel de l'opérateur.
Les API d'Android 9 prennent en charge les scénarios d'appels simultanés entre les applications 3P et les appels de l'opérateur. Cela permet, par exemple, de recevoir un appel 3P entrant tout en étant en communication avec l'opérateur. Le cadre assume la responsabilité de garantir que l'appel de l'opérateur est maintenu lorsque l'utilisateur participe à l'appel 3P.
Dans Android 9, les applications d'appel 3P sont encouragées à implémenter l'API ConnectionService
autogérée. Pour plus d'informations sur la création d'une application appelante à l'aide de cette API, consultez Créer une application appelante .
L'API ConnectionService
autogérée donne également aux développeurs la possibilité de choisir que les appels de leur application soient enregistrés dans le journal des appels système (voir EXTRA_LOG_SELF_MANAGED_CALLS
). Conformément aux exigences du document de définition de compatibilité Android (CDD) (section 7.4.1.2), vous devez vous assurer que votre application de numérotation/téléphone affiche ces entrées du journal d'appels et affiche le nom de l'application d'appel 3P d'où provient l'appel (pour un exemple de comment l'application de numérotation AOSP répond à cette exigence, voir Entrées du journal des appels des applications d'appel 3P ).
Les applications sont responsables de la configuration CAPABILITY_SUPPORT_HOLD
et CAPABILITY_HOLD
sur les connexions de leurs applications. Cependant, il est possible qu’une application ne puisse pas mettre en attente un appel dans certaines circonstances. Le cadre comprend des dispositions pour résoudre ce type de cas.
Scénarios
Vous devez modifier votre application de numérotation pour gérer les scénarios suivants.
Gestion des appels entrants qui déconnectent un appel en cours
Dans un scénario où il y a un appel 3P en cours (par exemple dans un appel SuperCaller) qui ne prend pas en charge la mise en attente et où l'utilisateur reçoit un appel mobile (par exemple via son opérateur FooCom), votre application Dialer/Téléphone doit indiquer à l'utilisateur que répondre l'appel sur le réseau mobile mettra fin à l'appel 3P en cours.
Cette expérience utilisateur est importante car une application d'appel 3P peut avoir un appel en cours qui ne peut pas être retenu par le framework. Répondre à un nouvel appel mobile entraîne la déconnexion de l'appel 3P en cours.
Voir l'interface utilisateur ci-dessous pour un exemple :
Votre application de numérotation peut vérifier si un appel entrant entraîne la déconnexion d'un autre appel en vérifiant les extras d'appel . Assurez-vous que EXTRA_ANSWERING_DROPS_FG_CALL
est défini sur TRUE
et EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME
est défini sur le nom de l'application dont l'appel est déconnecté lors de la réponse à l'appel mobile entrant.
Entrées du journal d'appels des applications d'appels 3P
Les développeurs d'applications d'appels 3P peuvent choisir que les appels de leur application soient enregistrés dans le journal des appels système (voir EXTRA_LOG_SELF_MANAGED_CALLS
). Cela signifie qu'il est possible d'avoir des entrées dans le journal des appels qui ne concernent pas les appels sur le réseau mobile.
Lorsque l'application de numérotation AOSP affiche les entrées du journal d'appels liées à une application d'appel 3P, le nom de l'application où l'appel a eu lieu s'affiche dans le journal d'appels, comme illustré ci-dessous :
Pour déterminer le nom d'une application associée à une entrée du journal d'appels, utilisez les colonnes PHONE_ACCOUNT_COMPONENT_NAME
et PHONE_ACCOUNT_ID
dans le fournisseur de journal d'appels pour créer une instance de PhoneAccountHandle
, qui identifie la source d'une entrée du journal d'appels. Interrogez TelecomManager
pour obtenir les détails du PhoneAccount.
Pour déterminer si une entrée du journal d'appels provient d'une application d'appel 3P, vérifiez les fonctionnalités PhoneAccount
pour voir si CAPABILITY_SELF_MANAGED
est défini.
La méthode getLabel
du PhoneAccount
renvoyé renvoie le nom de l'application associée à une entrée du journal des appels de l'application appelante 3P.
Validation
Pour vérifier que votre appareil prend en charge les applications d'appel 3P, utilisez l'application de test Telecomm, qui implémente l'API ConnectionService autogérée. L'application se trouve dans /packages/services/Telecomm/testapps/
.
Créez l'application de test à partir de la racine de votre référentiel source Android en utilisant :
mmma packages/services/Telecomm/testapps/
Installez l'apk de build en utilisant
adb install -g -r <apk path>
. Une icône d'échantillon autogéré est ensuite ajoutée à votre lanceur.Appuyez sur l'icône pour ouvrir l'application de test.
Gestion des appels entrants qui déconnectent un appel en cours
Suivez ces étapes pour vérifier qu'un appel entrant déconnecte un appel 3P en cours.
- Décochez l'option Holdable .
- Appuyez sur SORTANT pour démarrer un nouvel exemple d'appel sortant.
- Appuyez sur le bouton ACTIF pour rendre l'appel actif.
- Appelez le numéro de téléphone de l'appareil testé avec un autre téléphone. Cela invoque le scénario dans lequel votre numéroteur reçoit le nom d'une application, dont l'appel sera déconnecté.
- Lorsque vous avez terminé, appuyez sur le bouton DÉCONNEXION dans l'application de test.
Entrées du journal d'appels des applications d'appels 3P
Après avoir terminé les étapes ci-dessus, l'application de test devrait avoir enregistré un appel dans le journal des appels système. Pour confirmer que l'appareil enregistre les appels provenant d'applications d'appels 3P, ouvrez votre application de numérotation et confirmez que l'appel apparaît dans le journal des appels système.