Assurer la compatibilité avec les applications d'appel tierces

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 de l'opérateur. Par conséquent, les applications d'appel tierces doivent donner la priorité aux appels du transporteur 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 du transporteur.

Les API d'Android 9 prennent en charge les scénarios d'appel simultanés entre les applications tierces et les appels du transporteur. Cela permet, par exemple, de recevoir un appel entrant tiers pendant un appel au transporteur. Le framework se charge de s'assurer que l'appel du transporteur est mis en attente lorsque l'utilisateur passe l'appel tiers.

Sous Android 9, les applications d'appel tierces sont encouragées à implémenter l'API ConnectionService autogérée. Pour en savoir plus sur la création d'une application d'appel à l'aide de cette API, consultez la section Créer une application d'appel.

L'API ConnectionService autogérée permet également aux développeurs d'activer la journalisation des appels de leur application dans le journal des appels système (voir EXTRA_LOG_SELF_MANAGED_CALLS). Conformément aux exigences du document de définition de la compatibilité Android (CDD) (section 7.4.1.2), vous devez vous assurer que votre application de numérotation ou de téléphone affiche ces entrées de journal des appels et le nom de l'application appelante tierce à l'origine de l'appel (pour voir comment l'application de numérotation AOSP répond à cette exigence, consultez la section Entrées de journal des appels provenant d'applications appelantes tierces).

Les applications sont chargées de définir CAPABILITY_SUPPORT_HOLD et CAPABILITY_HOLD sur les connexions de leurs applications. Toutefois, il est possible qu'une application ne puisse pas maintenir un appel dans certains cas. Le framework inclut des dispositions pour résoudre ces types de cas.

Scénarios

Vous devez modifier votre application de numérotation pour gérer les scénarios suivants.

Gérer les appels entrants qui déconnectent un appel en cours

Si un appel tiers en cours (par exemple, un appel SuperCaller) ne prend pas en charge la mise en attente et que l'utilisateur reçoit un appel mobile (par exemple, via son opérateur FooCom), votre application Téléphone ou Téléphone doit indiquer à l'utilisateur que répondre à l'appel du réseau mobile met 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 maintenu par le framework. Répondre à un nouvel appel mobile entraîne la déconnexion de l'appel tiers en cours.

Pour en savoir plus, consultez l'interface utilisateur de la figure:

Appel entrant qui interrompt un appel tiers en cours

Figure 1 : Appel entrant qui interrompt un appel tiers en cours.

Votre application de numérotation peut vérifier si un appel entrant entraîne la déconnexion d'un autre appel en consultant les options supplémentaires de l'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 déconnecté lors de la réponse à l'appel mobile entrant.

Entrées du journal des appels provenant d'applications d'appel tierces

Les développeurs d'applications d'appel tierces peuvent activer la journalisation des appels de leur application dans le journal d'appels du 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 du réseau mobile.

Lorsque l'application du clavier AOSP affiche des entrées de journal des appels liées à une application appelante tierce, le nom de l'application dans laquelle l'appel a eu lieu s'affiche dans le journal des appels, comme illustré dans la figure:

Enregistrement du journal des appels avec une application d'appel tierce

Figure 2. Enregistrement du journal des appels avec le nom de l'application tierce utilisée pour passer l'appel dans l'application Téléphone.

Pour déterminer le nom d'une application associée à une entrée de journal des appels, utilisez les colonnes PHONE_ACCOUNT_COMPONENT_NAME et PHONE_ACCOUNT_ID du fournisseur de journal des appels pour créer une instance de PhoneAccountHandle, qui identifie la source d'une entrée de journal des appels. Interrogez TelecomManager pour obtenir les informations sur PhoneAccount.
Pour déterminer si une entrée du journal des appels provient d'une application d'appel tierce, 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 de journal des appels de l'application appelante 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/.

  1. Créez l'application de test à partir de la racine de votre dépôt source Android à l'aide de:

    mmma packages/services/Telecomm/testapps/

  2. Installez l'APK de compilation à l'aide de adb install -g -r <apk path>. Une icône d'exemple d'application gérée par l'utilisateur est ensuite ajoutée à votre lanceur d'applications.

  3. Appuyez sur l'icône pour ouvrir l'application de test.

Gérer les appels entrants qui déconnectent un appel en cours

Pour vérifier qu'un appel entrant interrompt un appel tiers en cours, procédez comme suit :

Tester l&#39;application pour les applications d&#39;appel tierces

Figure 3. Tester l'application avec des exemples d'implémentations de l'API ConnectionService

  1. Décochez l'option Holdable (Tenir).
  2. Appuyez sur SORTANT pour démarrer un nouvel exemple d'appel sortant.
  3. Appuyez sur le bouton ACTIVE pour activer l'appel.
  4. Appelez le numéro de téléphone de l'appareil testé à l'aide d'un autre téléphone. Cela appelle le scénario dans lequel le nom d'une application est fourni à votre numéroteur, ce qui entraîne la déconnexion de l'appel.
  5. Lorsque vous avez terminé, appuyez sur le bouton DISCONNECT (DÉCONNECTER) dans l'application de test.

Entrées du journal des appels provenant d'applications d'appel tierces

Une fois que vous avez suivi les étapes ci-dessus, l'application de test doit avoir enregistré un appel dans le journal des appels système. Pour vérifier que l'appareil consigne les appels provenant d'applications d'appel tierces, ouvrez votre application de numérotation et vérifiez que l'appel apparaît dans le journal des appels système.