Android Telecom Framework + AI Voice Agents: ConnectionService and CallsManager (2026)
Self-managed ConnectionService is the Android-blessed path for AI voice agents. Here is how to ship it with WebRTC, FCM, and the new Core-Telecom Jetpack CallsManager.
Android's Telecom framework is the equivalent of CallKit, but with two layers: the legacy ConnectionService and the modern Core-Telecom Jetpack CallsManager. AI voice agents in 2026 should target the latter and let it wrap the former for older devices.
Background
Android's Telecom framework manages calls system-wide and routes audio through the same pipeline used by the dialer app. A "self-managed" ConnectionService lets a third-party app advertise calls without taking over the dialer UI — exactly what an AI voice agent app needs. In November 2023 Google released the Core-Telecom Jetpack library, which introduces a new `CallsManager` class that obsoletes ConnectionService for new code while wrapping it on Android 8.0+.
In 2026, AI voice agent apps should write against `CallsManager`. It interoperates with system telephony, with other standalone calling apps, and with the new "stream call audio to your tablet" feature Google is rolling out across the device family.
Architecture
```mermaid flowchart LR Server[Voice Agent Backend] -- FCM high-priority --> FCM[(Firebase FCM)] FCM --> App[Android App] App -- addCall --> CallsManager[Core-Telecom CallsManager] CallsManager -- CallControlScope --> WebRTC[WebRTC PeerConnection] WebRTC -- DTLS-SRTP --> Gateway[Pion Go gateway 1.23] Gateway -- NATS --> Pod[6-container agent pod] ```
Hear it before you finish reading
Talk to a live CallSphere AI voice agent in your browser — 60 seconds, no signup.
CallSphere implementation
CallSphere's Android client matches the iOS architecture across the same six verticals:
- Real Estate (OneRoof) — Inbound calls land on the Pion Go gateway 1.23 → NATS → 6-container pod (CRM, MLS, calendar, SMS, audit, transcript). The Android app uses self-managed CallsManager + WebRTC. See /industries/real-estate.
- Healthcare — Same Android stack, OpenAI Realtime backend, full HIPAA + SOC 2 controls. See /industries/healthcare.
- /demo browser path — Plain Chrome on Android also works without Telecom framework. Try it at /demo.
37 agents, 90+ tools, 115+ database tables, 6 verticals, 14-day /trial, 22% affiliate at /affiliate. Pricing $149/$499/$1499.
Build steps with code
```kotlin // 1. Build a CallsManager and register capabilities val callsManager = CallsManager(context) callsManager.registerAppWithTelecom( capabilities = CallsManager.CAPABILITY_BASELINE or CallsManager.CAPABILITY_SUPPORTS_VIDEO_CALLING )
// 2. On FCM high-priority message, add the call suspend fun onFcmIncoming(payload: Map<String, String>) { val attributes = CallAttributesCompat( displayName = payload["from"] ?: "AI Agent", address = Uri.parse("voice:agent"), direction = CallAttributesCompat.DIRECTION_INCOMING, callType = CallAttributesCompat.CALL_TYPE_AUDIO_CALL, callCapabilities = CallAttributesCompat.SUPPORTS_SET_INACTIVE, ) callsManager.addCall(attributes, onAnswer = { type -> startWebRTC() // negotiate peer connection here }, onDisconnect = { reason -> stopWebRTC() }) } ```
```xml
Pitfalls
- Failing to register capabilities — `registerAppWithTelecom` must run before `addCall`; otherwise the call silently never reaches the system.
- Skipping the foreground-service-phone-call permission — Android 14+ rejects ongoing-call services without it.
- Holding RECORD_AUDIO without an active call session — Doze mode kills mics; let CallsManager hold the focus.
- Using a regular FCM message instead of high-priority — Android deprioritizes future pushes if you fail to show a call UI.
- Manually managing AudioManager mode — let CallsManager set `MODE_IN_COMMUNICATION` automatically.
FAQ
Is ConnectionService deprecated? Not yet — but the Jetpack CallsManager is the path forward. CallsManager wraps ConnectionService on older devices automatically.
Still reading? Stop comparing — try CallSphere live.
CallSphere ships complete AI voice agents per industry — 14 tools for healthcare, 10 agents for real estate, 4 specialists for salons. See how it actually handles a call before you book a demo.
Does it interoperate with CallKit on iOS? No — Telecom and CallKit are separate, but they expose semantically similar APIs (incoming/outgoing/answer/disconnect) that fit a single cross-platform abstraction.
Can I show my own UI? Yes for self-managed; the system handles audio routing while you own the screen.
Does it work with WebRTC? Yes — Telecom controls the audio mode and focus; WebRTC negotiates SRTP and renders into AudioTrack.
What about Bluetooth headsets? CallsManager + AudioManager-IN_COMMUNICATION routes correctly to Bluetooth SCO when one is connected.
Sources
- https://developer.android.com/develop/connectivity/telecom
- https://developer.android.com/develop/connectivity/telecom/voip-app/telecom
- https://android-developers.googleblog.com/2023/11/alpha-release-of-telecom-library.html
- https://github.com/team-telnyx/telnyx-webrtc-android
- https://www.infoq.com/news/2023/11/android-jetpack-telecom-library/
Try CallSphere on Android via the WebRTC /demo, pricing at /pricing, or start a /trial.
Try CallSphere AI Voice Agents
See how AI voice agents work for your industry. Live demo available -- no signup required.