capacitor-community / capacitor-community/proposals
Android VoIP Call Screen
- Dominant language
- No language data
- Stars
- 79
- Forks
- 2
- PR merge metrics
- No merged PRs in 30d
Description
## Plugin Request
**Name**: Android VoIP Call Screen
**Package**: `@capacitor-community/android-voip-call-screen`
---
### Platform(s)
- Android 10+
- Optional future support for iOS (CallKit integration)
---
### Existing Solutions
Existing related plugins:
- `@capacitor-community/callkit` – iOS CallKit integration only
- `cordova-plugin-callkit` – iOS focused
- `cordova-plugin-android-voip` – Limited maintenance
- Native Android Telecom API – Requires manual native implementation
Limitations of current solutions:
- No modern maintained plugin dedicated to Android native VoIP call UI
- No unified API to trigger system-level incoming call screen
- Hard to integrate with Firebase/Socket-based VoIP apps
- Lack of background service + foreground call notification abstraction
---
### Description
This plugin provides a native Android system-level VoIP call screen integration for Capacitor apps.
It allows web-based VoIP apps to:
- Trigger native Android incoming call UI
- Show full-screen call interface
- Display caller name, avatar, and call type
- Accept / Reject / End call actions from native UI
- Run as a foreground service during active calls
- Keep audio active in background
- Integrate with WebRTC / Socket.IO / SIP-based calling
- Maintain call state between app background and foreground
---
### Core Features
- 🔔 Show native incoming call screen
- 📱 Full-screen overlay during call
- 🎧 Foreground service for active calls
- 🔄 Handle Accept / Reject / End callbacks
- 🔒 Works when app is locked or minimized
- 📲 Supports multiple incoming calls queue
- 🔕 Auto-dismiss when call ends from backend
- 🧩 Event listeners for call actions
- ⚡ Lightweight API for JS control
---
### Example API (Proposed)
```ts
VoipCallScreen.showIncomingCall({
callerName: "John Doe",
callerAvatar: "https://example.com/avatar.jpg",
callId: "12345"
});
VoipCallScreen.endCall({ callId: "12345" });
VoipCallScreen.onCallAccepted((data) => {
console.log("Call accepted", data);
});
VoipCallScreen.onCallRejected((data) => {
console.log("Call rejected", data);
});
Contributor guide
Research direction
No implementation files or tests are named. Start by reviewing the proposed API and Android 10+ native Telecom API requirements, then define the supported call states, background behavior, and callback flow; done should cover the requested native incoming-call, active-call, and end-call behavior.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- android
- Domain
- audio-video-rtc, mobile
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100