Android 9 fournit des API pour mieux prendre en charge les applications d'appel tierces. Les applications d'appel tierces 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 des opérateurs. Par conséquent, les applications d'appel tierces 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 faire place à un appel de l'opérateur.
Les API d'Android 9 sont compatibles avec les scénarios d'appels simultanés entre les applications tierces et les appels de l'opérateur. Cela permet, par exemple, de recevoir un appel tiers entrant tout en étant engagé dans un appel opérateur. Le framework est responsable de la tenue de l'appel à l'opérateur lorsque l'utilisateur participe à l'appel tiers.
Dans Android 9, les applications d'appel tierces sont invitées à implémenter l'API ConnectionService
autogérée. Pour savoir comment créer une application d'appel à l'aide de cette API, consultez Créer une application d'appel.
L'API ConnectionService
autogérée permet également aux développeurs d'activer la journalisation des appels dans le journal d'appels système de leur application (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 téléphone ou de numérotation affiche ces entrées du journal d'appels et indique le nom de l'application d'appel tierce à l'origine de l'appel (pour voir comment l'application de numérotation AOSP répond à cette exigence, consultez Entrées du journal d'appels provenant d'applications d'appel tierces).
Les applications sont responsables de la définition de CAPABILITY_SUPPORT_HOLD
et de CAPABILITY_HOLD
sur les connexions de leurs applications. Toutefois, il est possible qu'une application ne puisse pas mettre un appel en attente dans certaines circonstances. Le règlement prévoit des dispositions pour résoudre ces types de cas.
Scénarios
Vous devez modifier votre application de téléphone pour gérer les scénarios suivants.
Gérer les appels entrants qui mettent fin à un appel en cours
Dans un scénario où un appel tiers est en cours (par exemple, un appel SuperCaller) qui ne prend pas en charge la mise en attente, et où l'utilisateur reçoit un appel mobile (par exemple, en utilisant son opérateur FooCom), votre application Téléphone ou Dialer doit indiquer à l'utilisateur que répondre à l'appel sur le réseau mobile mettra fin à l'appel tiers en cours.
Cette expérience utilisateur est importante, car une application d'appel tierce peut avoir un appel en cours qui ne peut pas être mis en attente par le framework. Si vous répondez à un nouvel appel mobile, l'appel tiers en cours est interrompu.
Pour obtenir un exemple, consultez l'interface utilisateur dans l'illustration :
Figure 1 : Un appel entrant interrompt un appel en cours avec un tiers.
Votre application de téléphone peut vérifier si un appel entrant entraîne la déconnexion d'un autre appel en consultant les extras d'appel.
Assurez-vous que EXTRA_ANSWERING_DROPS_FG_CALL
est défini sur TRUE
et que EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME
est défini sur le nom de l'application dont l'appel est coupé lorsque vous répondez à l'appel mobile entrant.
Entrées du journal d'appels provenant d'applications d'appel tierces
Les développeurs d'applications d'appel tierces peuvent choisir d'enregistrer les appels de leur application dans le journal d'appels système (voir EXTRA_LOG_SELF_MANAGED_CALLS
). Cela signifie qu'il est possible d'avoir des entrées dans le journal d'appels qui ne concernent pas les appels sur le réseau mobile.
Lorsque l'application de téléphone AOSP affiche des entrées du journal d'appels liées à une application d'appel tierce, le nom de l'application dans laquelle l'appel a eu lieu s'affiche dans le journal d'appels, comme illustré dans la figure :
Figure 2. Entrée du journal d'appels avec le nom de l'application d'appel tierce dans l'application de téléphone.
Pour déterminer le nom d'une application associée à une entrée du journal des appels, utilisez les colonnes PHONE_ACCOUNT_COMPONENT_NAME
et PHONE_ACCOUNT_ID
du fournisseur du journal des appels pour créer une instance de PhoneAccountHandle
, qui identifie la source d'une entrée du journal des 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 tierce, vérifiez les capacités PhoneAccount
pour voir si CAPABILITY_SELF_MANAGED
est défini.
La méthode getLabel
de l'PhoneAccount
renvoyé renvoie le nom de l'application associée à une entrée du journal des appels de l'application d'appel tierce.
Validation
Pour vérifier que votre appareil est compatible avec les applications d'appel tierces, 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 dépôt de code source Android à l'aide de la commande suivante :
mmma packages/services/Telecomm/testapps/
Installez l'APK de compilation à l'aide de
adb install -g -r <apk path>
. Une icône d'exemple autogéré est ensuite ajoutée à votre lanceur d'applications.Appuyez sur l'icône pour ouvrir l'application de test.
Gérer les appels entrants qui mettent fin à un appel en cours
Suivez ces étapes pour vérifier qu'un appel entrant met fin à un appel tiers en cours.
Figure 3. Testez l'application avec des exemples d'implémentations de l'API ConnectionService.
- Décochez l'option Holdable (Maintenable).
- Appuyez sur SORTANT pour démarrer un nouvel exemple d'appel sortant.
- Appuyez sur le bouton ACTIVER pour rendre l'appel actif.
- Appelez le numéro de téléphone de l'appareil testé avec un autre téléphone. Cela déclenche le scénario dans lequel le nom d'une application est fourni à votre application de téléphone, ce qui entraîne la déconnexion de l'appel.
- Lorsque vous avez terminé, appuyez sur le bouton DISCONNECT (SE DÉCONNECTER) dans l'application de test.
Entrées du journal d'appels provenant d'applications d'appel tierces
Une fois les étapes ci-dessus effectuées, l'application de test devrait avoir enregistré un appel au journal d'appels système. Pour vérifier que l'appareil enregistre les appels des applications d'appel tierces, ouvrez votre application de téléphone et vérifiez que l'appel apparaît dans le journal d'appels système.