---
title: "Android Telecom Framework + AI Voice Agents: ConnectionService and CallsManager (2026)"
description: "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."
canonical: https://callsphere.ai/blog/vw4e-android-telecom-framework-ai-voice-agents-2026
category: "AI Voice Agents"
tags: ["Android", "Telecom", "WebRTC", "Voice AI", "ConnectionService"]
author: "CallSphere Team"
published: 2026-03-17T00:00:00.000Z
updated: 2026-05-07T16:13:33.752Z
---

# 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]
```

## 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](/industries/real-estate).
- **Healthcare** — Same Android stack, OpenAI Realtime backend, full HIPAA + SOC 2 controls. See [/industries/healthcare](/industries/healthcare).
- **/demo browser path** — Plain Chrome on Android also works without Telecom framework. Try it at [/demo](/demo).

37 agents, 90+ tools, 115+ database tables, 6 verticals, 14-day [/trial](/trial), 22% affiliate at [/affiliate](/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) {
  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.

**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)
- [https://developer.android.com/develop/connectivity/telecom/voip-app/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://android-developers.googleblog.com/2023/11/alpha-release-of-telecom-library.html)
- [https://github.com/team-telnyx/telnyx-webrtc-android](https://github.com/team-telnyx/telnyx-webrtc-android)
- [https://www.infoq.com/news/2023/11/android-jetpack-telecom-library/](https://www.infoq.com/news/2023/11/android-jetpack-telecom-library/)

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

---

Source: https://callsphere.ai/blog/vw4e-android-telecom-framework-ai-voice-agents-2026
