Cronologia chiamate unificata

Le applicazioni VoIP possono integrare le proprie chiamate nel registro chiamate di sistema. In questo modo, gli utenti possono visualizzare la cronologia chiamate VoIP in modo centralizzato nell'app Telefono di sistema e richiamare direttamente dall'app Telefono. Questa guida descrive le modifiche richieste alle app di chiamate VoIP e app Telefono di sistema.

Modifiche per l'app di chiamate

Per integrare l'app VoIP con il registro chiamate di sistema, segui questi passaggi.

Registra il filtro dell'intent di callback

Registra l'intent protetto dal sistema TelecomManager.ACTION_CALL_BACK.

Una volta registrato correttamente questo filtro per intent, tutte le chiamate aggiunte dall'app utilizzando CallsManager.addCall o altre API Telecom correlate verranno automaticamente registrate dal sistema. Il sistema utilizza questo intent registrato per inviare in un secondo momento un callback alla tua app quando un utente seleziona una voce di log delle chiamate VoIP nell'app Telefono per richiamare.

<!-- 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>

Escludi la registrazione delle chiamate

Una volta registrato il callback, tutte le chiamate vengono registrate nell'app Telefono di sistema. Per escludere le chiamate in base alla singola chiamata, imposta il isLogExcluded valore booleano su true all'interno di 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
        ),
)

Gestisci i callback

Le chiamate aggiunte tramite CallsManager.addCall ricevono un UUID univoco tramite 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 le voci del registro chiamate

Il registro chiamate di sistema mantiene un numero finito di voci e alla fine elimina i vecchi record delle chiamate. Poiché l'app memorizza una mappatura degli UUID ai dettagli delle chiamate per la gestione dei callback, deve controllare periodicamente quali UUID sono ancora presenti nel registro chiamate di sistema. Se un UUID non è più presente nel log di sistema, l'utente non può avviare un callback per quella chiamata e l'app può rimuovere in sicurezza la mappatura dalla sua memoria locale. Questa pratica aiuta a ottimizzare lo spazio di archiviazione.

Per ottenere l'elenco corrente degli UUID attribuiti all'app all'interno del log di sistema, utilizza CallLog.Calls.CONTENT_VOIP_URI.

Modifiche per l'app Telefono

Segui questi passaggi per consentire all'app Telefono di visualizzare i registri chiamate VoIP e avviare i callback alle app VoIP.

Visualizza i registri chiamate VoIP nell'app Telefono

Per impostazione predefinita, i registri chiamate delle app VoIP non vengono visualizzati nell'app Telefono. Per visualizzare i registri chiamate integrati nell'app Telefono:

  • Su Android 16.1 (livello API 36.1), aggiungi il parametro di query include_voip_calls al content provider CallLog.Calls per visualizzare i registri chiamate VoIP:

    CallLog.Calls.CONTENT_URI.buildUpon()
        .appendQueryParameter("include_voip_calls", "true")
        .build()

  • Su Android 17 (livello API 37) e versioni successive, utilizza il seguente content provider formalizzato e la seguente chiave del parametro:

Avvia i callback dall'app Telefono

Per avviare un callback da un'app Telefono, utilizza TelecomManager.placeCall. La piattaforma utilizza l'CallLog.Calls._ID univoco della voce di log del registro chiamate per avviare l'app VoIP corretta. Questo avvio include un TelecomManager.ACTION_CALL_BACK intent, che è un'azione definita dal sistema per avviare una richiamata. Questo intent contiene il UUID della chiamata nell' extra dell'intent TelecomManager.EXTRA_UUID, che consente all'app VoIP di identificare la chiamata specifica che viene richiamata.

// 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)