VoIP-Anwendungen können ihre Anrufe in die Systemanrufliste einbinden. So können Nutzer ihre VoIP-Anrufliste zentral in der System-Dialer-App einsehen und Anrufe direkt über die Dialer-App zurückrufen. In diesem Leitfaden werden die erforderlichen Änderungen an VoIP-Anruf-Apps und System-Dialer-Apps beschrieben.
Änderungen für die Anruf-App
So integrieren Sie Ihre VoIP-App in die Systemanrufliste:
Callback-Intent-Filter registrieren
Registrieren Sie die systemgeschützte Intent TelecomManager.ACTION_CALL_BACK.
Sobald dieser Intent-Filter richtig registriert ist, werden alle Anrufe, die Ihre App mit CallsManager.addCall oder anderen zugehörigen Telecom-APIs hinzufügt, automatisch vom System protokolliert. Das System verwendet diesen registrierten Intent später, um einen Callback an Ihre App zu senden, wenn ein Nutzer einen VoIP-Anruflisten-Logeintrag in der Wählhilfe auswählt, um den Anruf zu erwidern.
<!-- 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>
Anrufprotokollierung ausschließen
Sobald der Rückruf registriert ist, werden alle Anrufe im System-Dialer protokolliert. Wenn Sie Anrufe einzeln ausschließen möchten, legen Sie den booleschen Wert isLogExcluded in CallAttributesCompat auf true fest.
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 ), )
Callbacks verarbeiten
Über CallsManager.addCall hinzugefügte Anrufe erhalten über CallControlScope.getCallId eine eindeutige UUID.
// 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) ) ) }
Anrufliste prüfen
Im Systemanruflog wird eine begrenzte Anzahl von Einträgen gespeichert. Alte Anrufaufzeichnungen werden schließlich gelöscht. Da die App eine Zuordnung von UUID zu Anrufdetails für die Callback-Verarbeitung speichert, sollte sie regelmäßig prüfen, welche UUID noch im Systemanrufprotokoll vorhanden sind. Wenn ein UUID nicht mehr im Systemlog vorhanden ist, kann der Nutzer keinen Rückruf für diesen Anruf initiieren und die App kann die Zuordnung sicher aus dem lokalen Speicher entfernen. So lässt sich der Speicher optimieren.
Wenn Sie die aktuelle Liste der UUIDs abrufen möchten, die der App im Systemprotokoll zugeordnet sind, verwenden Sie CallLog.Calls.CONTENT_VOIP_URI.
Änderungen an der Telefon App
So aktivieren Sie die Dialer App, damit VoIP-Anruflisten angezeigt und Rückrufe an VoIP-Apps gestartet werden können:
VoIP-Anruflisten in der Telefon-App anzeigen
Standardmäßig werden Anruflisten von VoIP-Apps nicht in der Telefon-App angezeigt. So blenden Sie die integrierten Anruflisten in der Telefon-App ein:
Hängen Sie unter Android 16.1 (API‑Level 36.1) den Abfrageparameter
include_voip_callsan den ContentanbieterCallLog.Callsan, um VoIP-Anruflisten anzuzeigen:CallLog.Calls.CONTENT_URI.buildUpon() .appendQueryParameter("include_voip_calls", "true") .build()
Unter Android 17 (API-Level 37) und höher verwenden Sie den folgenden formalisierten Contentanbieter und Parameterschlüssel:
Rückrufe über die Telefon App starten
Verwenden Sie TelecomManager.placeCall, um einen Rückruf über eine Wählhilfe zu starten. Die Plattform verwendet die eindeutige CallLog.Calls._ID des Anrufliste-Eintrags, um die richtige VoIP-App zu starten. Dieser Start umfasst einen TelecomManager.ACTION_CALL_BACK-Intent, eine vom System definierte Aktion zum Starten eines Rückrufs. Diese Absicht enthält die UUID des Anrufs im Intent-Extra TelecomManager.EXTRA_UUID, sodass die VoIP-App erkennen kann, welcher Anruf zurückgerufen wird.
// 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)