Os aplicativos VoIP podem integrar as chamadas ao registro de chamadas do sistema. Isso permite que os usuários vejam o histórico de ligações VoIP centralmente no app Telefone do sistema e retornem chamadas diretamente do app Telefone. Este guia descreve as mudanças necessárias nos apps de chamadas VoIP e nos apps Telefone do sistema.
Mudanças no app de chamadas
Para integrar seu app VoIP ao registro de chamadas do sistema, siga estas etapas.
Registrar filtro de intent de callback
Registre a intent protegida pelo sistema TelecomManager.ACTION_CALL_BACK.
Depois que esse filtro de intent for registrado corretamente, todas as chamadas que seu app adicionar usando
CallsManager.addCall ou outras APIs Telecom relacionadas serão registradas
automaticamente pelo sistema. O sistema usa essa intent registrada para enviar um
callback ao app quando um usuário seleciona uma entrada do registro de chamadas VoIP no discador
para retornar a ligação.
<!-- 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>
Excluir o registro de chamadas
Depois que o callback é registrado, todas as chamadas são registradas no discador
do sistema. Para excluir chamadas individualmente, defina o booleano isLogExcluded
como true em 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 ), )
Processar callbacks
As chamadas adicionadas por CallsManager.addCall recebem um UUID exclusivo por
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) ) ) }
Verificar entradas de registro de chamadas
O registro de chamadas do sistema mantém um número finito de entradas e, eventualmente, exclui registros de chamadas antigos. Como o app armazena um mapeamento de UUIDs para chamar
detalhes para o processamento de callback, ele precisa verificar periodicamente quais UUIDs ainda estão
presentes no registro de chamadas do sistema. Se um UUID não estiver mais no registro
do sistema, o usuário não poderá iniciar um callback para essa chamada, e o app poderá
remover com segurança o mapeamento do armazenamento local. Essa prática ajuda a otimizar o armazenamento.
Para conferir a lista atual de UUIDs atribuídos ao app no registro
do sistema, use CallLog.Calls.CONTENT_VOIP_URI.
Mudanças no app Telefone
Siga estas etapas para permitir que o app discador mostre registros de chamadas VoIP e inicie retornos de chamada para apps VoIP.
Mostrar registros de chamadas VoIP no app discador
Por padrão, os registros de chamadas de apps VoIP não aparecem no app discador. Para mostrar os registros de chamadas integrados no app discador, faça o seguinte:
No Android 16.1 (nível da API 36.1), adicione o parâmetro de consulta
include_voip_callsao provedor de conteúdoCallLog.Callspara mostrar os registros de chamadas VoIP:CallLog.Calls.CONTENT_URI.buildUpon() .appendQueryParameter("include_voip_calls", "true") .build()
No Android 17 (nível 37 da API) e versões mais recentes, use o seguinte provedor de conteúdo e chave de parâmetro formalizados:
Iniciar retornos de chamada no app discador
Para iniciar um callback de um discador, use TelecomManager.placeCall. A
plataforma usa o CallLog.Calls._ID exclusivo da entrada de registro de chamadas para iniciar
o app VoIP correto. Esse início inclui um
intent TelecomManager.ACTION_CALL_BACK, que é uma ação definida pelo sistema
para iniciar uma ligação de retorno. Essa intent contém o UUID da chamada no
extra da intent TelecomManager.EXTRA_UUID, permitindo que o app VoIP identifique
qual chamada específica está sendo retornada.
// 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)