How to Inspect Active Calls and Telecom Audio Routing on Android Using ADB dumpsys telecom

In modern Android architecture, all voice calling functionality\u2014spanning traditional cellular calls (Circuit-Switched and VoLTE/VoNR), carrier Wi-Fi Calling (VoWiFi), and third-party VoIP applications (such as WhatsApp, Microsoft Teams, and custom enterprise SIP softphones)\u2014is centralized within the Android Telecom framework. Managed by TelecomManager and TelecomLoaderService, the subsystem orchestrates call state machines, in-call UI presentation, call screening, and audio endpoint routing (earpiece, built-in speaker, Bluetooth SCO headset, or wired earphones). To troubleshoot call connection failures, examine active audio routes, and audit registered phone accounts, the Android Debug Bridge (ADB) provides the dumpsys telecom command.

Understanding the Android Telecom Architecture

The Telecom framework operates across several coordinated layers:

  • PhoneAccount: Represents a distinct calling identity or provider (e.g., SIM 1, SIM 2, or a third-party VoIP connection service). Applications register phone accounts with explicit capability flags.
  • ConnectionService: The core service component implemented by VoIP apps or telephony providers to create, answer, hold, and terminate audio/video calls.
  • CallAudioRouteStateMachine: The internal state machine that selects and routes active call audio between available hardware transducers (EARPIECE, SPEAKER, BLUETOOTH, or WIRED_HEADSET).
  • Call Screening & Blocking: Subsystems that evaluate incoming numbers against spam databases and carrier blocklists before notifying the user.

Generating a Comprehensive Telecom Diagnostics Dump

To inspect overall telecom status, registered calling services, and active call records on a connected Android device, execute:

adb shell dumpsys telecom

Because the complete output includes detailed call history and internal state dumps, filtering output by section header simplifies diagnostics.

Inspecting Active Calls and Call State Machines

To view calls currently placed, answered, or ringing on the device:

adb shell dumpsys telecom | grep -A 25 "Calls:"

The diagnostic dump details call parameters:

Calls:
  Call TC@128:
    handle: tel:+15550199482
    state: ACTIVE
    direction: OUTGOING
    targetPhoneAccount: ComponentInfo{com.android.phone/com.android.services.telephony.TelephonyConnectionService}, [7c41a200...]
    audioState: AudioState [AudioMode: IN_CALL, isMuted: false, route: EARPIECE, supportedRouteMask: EARPIECE, SPEAKER, BLUETOOTH]
    creationTime: 1730977200000
    connectTime: 1730977205000

Key information revealed:

  • state: Confirms the exact lifecycle phase (DIALING, RINGING, ACTIVE, ON_HOLD, or DISCONNECTED).
  • targetPhoneAccount: Identifies which carrier SIM or third-party VoIP package is handling the media connection.
  • audioState: Shows the active audio output transducer and verifies available audio routing capabilities.

Auditing Call Audio Routing States

Audio routing bugs often occur when switching between Bluetooth headsets and the speakerphone during a call. To inspect the active audio state machine:

adb shell dumpsys telecom | grep -A 10 "CallAudioRouteStateMachine"

The output reports:

CallAudioRouteStateMachine:
  Current state: ActiveEarpieceRoute
  Bluetooth device connected: false
  Wired headset connected: false
  Speakerphone on: false

If audio fails to transition to a newly connected Bluetooth headset, verify whether the state transitioned to ActiveBluetoothRoute or halted due to an unhandled SCO socket error.

Auditing Registered Phone Accounts and Dialler Providers

To inspect which applications have registered calling accounts on your device:

adb shell dumpsys telecom | grep -A 15 "PhoneAccounts:"

The dump catalogues authorized accounts:

PhoneAccounts:
  Account: ComponentInfo{com.android.phone/com.android.services.telephony.TelephonyConnectionService}, SubId=1 [Enabled: true, Cap: CALL_PROVIDER | SIM_SUBSCRIPTION]
  Account: ComponentInfo{com.example.voipapp/com.example.voipapp.VoIPConnectionService}, UserHandle=0 [Enabled: true, Cap: CONNECTION_MANAGER | CALL_PROVIDER]

This allows verification that VoIP applications have properly registered their ConnectionService and acquired user authorization to handle system calling intents.

Simulating and Ending Calls via ADB for Testing

To test how the system reacts to incoming calls or initiate test calls programmatically:

To initiate an outbound call:

adb shell am start -a android.intent.action.CALL -d tel:5550199

To immediately end or reject an active call:

adb shell cmd telecom end-call

Using dumpsys telecom alongside Telecom ADB commands ensures reliable verification of VoIP integrations, call state stability, and Bluetooth audio transitions.

Get the best tech tips delivered straight to your inbox.

Join thousands of readers mastering Apple, Google, Microsoft, and Linux.