Skip to content
AI Voice Agents
AI Voice Agents11 min0 views

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.

Try Live Demo →

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

Try CallSphere on Android via the WebRTC /demo, pricing at /pricing, or start a /trial.

Share

Try CallSphere AI Voice Agents

See how AI voice agents work for your industry. Live demo available -- no signup required.

Related Articles You May Like