Les applications VoIP peuvent intégrer leurs appels au journal d'appels du système. Cela permet aux utilisateurs de consulter l'historique de leurs appels VoIP de manière centralisée dans l'application Téléphone système et de rappeler des numéros directement depuis cette application. Ce guide décrit les modifications requises pour les applications d'appel VoIP et les applications Téléphone système.
Modifications apportées à l'application d'appel
Pour intégrer votre application VoIP au journal des appels système, procédez comme suit.
Enregistrer le filtre d'intent de rappel
Enregistrez l'intention protégée par le système TelecomManager.ACTION_CALL_BACK.
Une fois ce filtre d'intent correctement enregistré, tous les appels ajoutés par votre application à l'aide de CallsManager.addCall ou d'autres API Telecom associées seront automatiquement enregistrés par le système. Le système utilise cet intent enregistré pour envoyer ultérieurement un rappel à votre application lorsqu'un utilisateur sélectionne une entrée de journal d'appels VoIP dans le clavier de numérotation pour rappeler.
<!-- Activity to handle the callback intent from the system dialer --> <activity android:name=".VoipCallActivity" android:exported="true"> <!-- Register callback intent --> <intent-filter> <action android:name="android.telecom.action.CALL_BACK" /> </intent-filter> </activity>
Exclure la journalisation des appels
Une fois le rappel enregistré, tous les appels sont consignés dans le système de numérotation. Pour exclure des appels individuellement, définissez le booléen isLogExcluded sur true dans CallAttributesCompat.
CallAttributesCompat( displayName = displayName, address = address, isLogExcluded = excludeCallLogging, // to exclude call from logging direction = if (isIncoming) { CallAttributesCompat.DIRECTION_INCOMING } else { CallAttributesCompat.DIRECTION_OUTGOING }, callType = CallAttributesCompat.CALL_TYPE_AUDIO_CALL, callCapabilities = ( CallAttributesCompat.SUPPORTS_SET_INACTIVE or CallAttributesCompat.SUPPORTS_STREAM or CallAttributesCompat.SUPPORTS_TRANSFER ), )
Gérer les rappels
Les appels ajoutés via CallsManager.addCall reçoivent un UUID unique via CallControlScope.getCallId.
// check the intent action for CALL_BACK if (intent.action == TelecomManager.ACTION_CALL_BACK) { launchCall( // fetching stored call details for the UUID to initiate callback callDetails = getCallDetails( uuid = intent.getStringExtra(TelecomManager.EXTRA_UUID) ) ) }
Vérifier les entrées du journal des appels
Le journal des appels système conserve un nombre fini d'entrées et finit par supprimer les anciens enregistrements d'appels. Étant donné que l'application stocke un mappage des UUID aux détails des appels pour la gestion des rappels, elle doit vérifier régulièrement quels UUID sont toujours présents dans le journal des appels système. Si un UUID n'est plus dans le journal système, l'utilisateur ne peut pas lancer de rappel pour cet appel, et l'application peut supprimer le mappage de son stockage local en toute sécurité. Cette pratique permet d'optimiser le stockage.
Pour obtenir la liste actuelle des UUID attribués à l'application dans le journal système, utilisez CallLog.Calls.CONTENT_VOIP_URI.
Modifications apportées à l'application Téléphone
Pour permettre à l'application Téléphone d'afficher les journaux d'appels VoIP et d'initier des rappels vers les applications VoIP, procédez comme suit.
Afficher les journaux d'appels VoIP dans l'application Téléphone
Par défaut, les journaux d'appels des applications VoIP n'apparaissent pas dans l'application Téléphone. Pour afficher les journaux d'appels intégrés dans l'application Téléphone, procédez comme suit :
Sur Android 16.1 (niveau d'API 36.1), ajoutez le paramètre de requête
include_voip_callsau fournisseur de contenuCallLog.Callspour afficher les journaux d'appels VoIP :CallLog.Calls.CONTENT_URI.buildUpon() .appendQueryParameter("include_voip_calls", "true") .build()
Sur Android 17 (niveau d'API 37) et versions ultérieures, utilisez le fournisseur de contenu et la clé de paramètre formalisés suivants :
Initier des rappels depuis l'application Téléphone
Pour lancer un rappel à partir d'un clavier de numérotation, utilisez TelecomManager.placeCall. La plate-forme utilise le CallLog.Calls._ID unique de l'entrée du journal d'appels pour lancer la bonne application VoIP. Ce lancement inclut un intent TelecomManager.ACTION_CALL_BACK, qui est une action définie par le système pour lancer un rappel. Cette intention contient le UUID de l'appel dans l'extra d'intention TelecomManager.EXTRA_UUID, ce qui permet à l'application VoIP d'identifier l'appel spécifique auquel l'utilisateur souhaite être rappelé.
// Uri generated with unique ID of the call log entry to launch the respective VoIP app for callback val address = ContentUris.withAppendedId(CallLog.Calls.CONTENT_URI, callId) // extra information required to initiate callback val extras = Bundle() telecomManager.placeCall(address, extras)