Now, your Android tablet can show an InCallUI for a call active on your phone. This is implemented via a new InCallService extension that proxies touch events (mute, speaker) back to the phone over Bluetooth LE.
The InCallUI activity requires an absurdly fast start-up time. Telecom starts a "warm-up" process pre-emptively. If your InCallActivity takes longer than ~200ms to inflate its layout or bind to InCallService , the system times out. The call connects, but the UI never appears. incallui
Use adb shell dumpsys telecom and look for InCallController . If you see mIsBound = false while a call is active, your UI has crashed silently. Customizing InCallUI (The Right Way) Let’s say you're building a VoIP app (like WhatsApp or Signal). You don't want to replace the system dialer. You want your own call screen inside your app. Now, your Android tablet can show an InCallUI
But here’s the catch: For a long time, InCallUI was a tightly guarded, OEM-specific application. With the introduction of the Telecom framework and ConnectionService APIs, Google attempted to standardize it. Yet, the reality remains messy. Telecom starts a "warm-up" process pre-emptively
adb shell am force-stop com.android.dialer adb shell am start -a android.intent.action.ANSWER If the phone still rings but you can't see the UI, you've replicated a core Telecom bug. With Android 14, Google doubled down on "cross-device calling" (Call Streaming). This introduces a new layer: RemoteInCallService .
Trying to overlay a Dialog on top of the system InCallUI. This never works reliably due to SYSTEM_ALERT_WINDOW restrictions and the fact that the system InCallUI has the highest priority ( TYPE_APPLICATION_OVERLAY is lower than TYPE_PHONE ).