Las aplicaciones de VoIP pueden integrar sus llamadas en el registro de llamadas del sistema. Esto permite que los usuarios vean su historial de llamadas de VoIP de forma centralizada en la app de marcador del sistema y que devuelvan llamadas directamente desde ella. En esta guía, se describen los cambios necesarios en las apps de llamadas de VoIP y apps de marcador del sistema.
Cambios en la app de llamadas
Para integrar tu app de VoIP en el registro de llamadas del sistema, sigue estos pasos.
Registra el filtro de intents de devolución de llamada
Registra el intent protegido por el sistema TelecomManager.ACTION_CALL_BACK.
Una vez que este filtro de intents esté registrado correctamente, el sistema registrará automáticamente cualquier llamada que agregue tu app con
CallsManager.addCall o cualquier otra API de Telecom relacionada. El sistema usa este intent registrado para enviar una devolución de llamada a tu app cuando un usuario selecciona una entrada del registro de llamadas de VoIP en el marcador para devolver la llamada.
<!-- 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>
Excluye el registro de llamadas
Una vez que se registra la devolución de llamada, todas las llamadas se registran en el marcador del sistema. Para excluir llamadas por llamada, establece el valor isLogExcluded
booleano en true dentro de 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 ), )
Controla las devoluciones de llamada
Las llamadas agregadas a través de CallsManager.addCall obtienen un UUID único a través de
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) ) ) }
Verifica las entradas del registro de llamadas
El registro de llamadas del sistema mantiene una cantidad finita de entradas y, finalmente, borra los registros de llamadas antiguos. Debido a que la app almacena una asignación de UUID a los detalles de la llamada para el control de la devolución de llamada, debe verificar periódicamente qué UUID aún están presentes en el registro de llamadas del sistema. Si un UUID ya no está en el registro del sistema, el usuario no puede iniciar una devolución de llamada para esa llamada, y la app puede quitar de forma segura la asignación de su almacenamiento local. Esta práctica ayuda a optimizar el almacenamiento.
Para obtener la lista actual de UUID atribuidos a la app dentro del registro del sistema, usa CallLog.Calls.CONTENT_VOIP_URI.
Cambios en la app de marcador
Sigue estos pasos para permitir que la app de marcador muestre los registros de llamadas de VoIP y que inicie devoluciones de llamada a las apps de VoIP.
Muestra los registros de llamadas de VoIP en la app de marcador
De forma predeterminada, los registros de llamadas de las apps de VoIP no aparecen en la app de marcador. Para mostrar los registros de llamadas integrados en la app de marcador, haz lo siguiente:
En Android 16.1 (nivel de API 36.1), agrega el parámetro de consulta
include_voip_callsal proveedor de contenidoCallLog.Callspara mostrar los registros de llamadas de VoIP:CallLog.Calls.CONTENT_URI.buildUpon() .appendQueryParameter("include_voip_calls", "true") .build()
En Android 17 (nivel de API 37) y versiones posteriores, usa el siguiente proveedor de contenido formalizado y clave de parámetro:
Inicia devoluciones de llamada desde la app de marcador
Para iniciar una devolución de llamada desde un marcador, usa TelecomManager.placeCall. La
plataforma usa el CallLog.Calls._ID único de la entrada del registro de llamadas para iniciar
la app de VoIP correcta. Este inicio incluye un
TelecomManager.ACTION_CALL_BACK intent, que es una acción definida por el sistema
para iniciar una devolución de llamada. Este intent contiene el UUID de la llamada en el extra de intent TelecomManager.EXTRA_UUID, lo que permite que la app de VoIP identifique a qué llamada específica se está devolviendo.
// 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)