An original two-component architecture designed to solve automated WhatsApp VoIP recording on modern Android (10 through 15). Built without root, with zero advertisements, and fully local on-device storage.
Both apps work as a coordinated team: install both APKs on your device to enable automatic WhatsApp VoIP detection, background audio capture, and recordings management.
The primary user interface (redesigned matching competitor standard). Manages the recordings library, in-line player, call metadata, date grouping, search, favorites, test recording generator, and Firebase Crashlytics.
The background worker engine. Prioritizes raw MIC source, runs wide-range Automatic Gain Control (+37.5 dB / up to 75x boost for faint receiver voice), passive recording without stealing WhatsApp session, and instant synchronization.
Settings > Accessibility during your test so the hardware microphone lock is released for SquareCircle.
Developers attempting to build WhatsApp call recorders on Android 10+ encounter two major roadblocks:
AccessibilityService API for call recording. Apps that bundle both UI and call-recording accessibility hooks are removed from the store.USAGE_VOICE_COMMUNICATION, which Android's public AudioPlaybackCapture is hard-coded to ignore.By splitting the solution into two dedicated apps (the same architectural pattern pioneered by Cube ACR and ACR Phone):
| Component | Google Play / OS Role | Permissions Required |
|---|---|---|
| Main App (VoipCallRecorder) | Fully Google Play compliant. Does not request Accessibility. Acts as the user hub, playback manager, and floating overlay provider. | POST_NOTIFICATIONS, SYSTEM_ALERT_WINDOW |
| Companion Helper (VoipHelper) | Directly sideloaded companion engine. Hooks WhatsApp calling window events and manages low-level hardware mic and speaker routing. | RECORD_AUDIO, BIND_ACCESSIBILITY_SERVICE, FOREGROUND_SERVICE_MICROPHONE |
Here is what happens under the hood when a WhatsApp VoIP call begins and ends:
WhatsAppAccessibilityService monitors window transitions. When it detects VoipActivity or VoipActivityV2 from com.whatsapp or com.whatsapp.w4b, it traverses the view tree to automatically extract the contact name.
HelperRecordingService starts as a microphone foreground service. AudioCaptureEngine invokes modern AudioManager.setCommunicationDevice(TYPE_BUILTIN_SPEAKER) (or fallback) to maximize acoustic voice bleed from the remote party.
AudioGainProcessor applies a 2.0x digital gain multiplier to amplify remote voice levels before streaming into Android's native MediaCodec hardware AAC encoder (outputting .m4a).
ACTION_RECORDING_STARTED to the Main App. The Main App's HelperConnector launches FloatingOverlayService, presenting a glowing in-call widget over WhatsApp to show active recording status.
.m4a file into a secure FileProvider content URI. It dispatches ACTION_RECORDING_FINISHED. The Main App ingests the file into private storage, records the duration and contact into the Room SQLite database, and refreshes the UI.
To deliver automated background recording without root, the dual-app suite delegates specific capabilities between the Companion Helper and Main App. Here is everything required and where to enable each:
The background service responsible for detecting VoIP screens, routing audio hardware, and capturing the conversation.
| Permission / Setting | Type / Scope | Why It Is Needed | How & Where to Enable |
|---|---|---|---|
| 0. Restricted Settings Unlock Crucial for Android 13, 14 & 15 |
System Security | Android blocks Accessibility for sideloaded APKs by default with a greyed-out toggle. | Phone Settings → Apps → VoIP Recorder Helper → tap ⋮ (top-right menu) → "Allow restricted settings" (confirm with PIN/fingerprint). |
1. Accessibility ServiceBIND_ACCESSIBILITY_SERVICE |
Required | Hooks VoipActivityV2 window transitions from com.whatsapp / com.whatsapp.w4b and reads caller name. |
Phone Settings → Accessibility → Downloaded apps → VoIP Recorder Helper Service → Turn ON. |
2. Microphone CaptureRECORD_AUDIO |
Required | Accesses hardware microphone stream to capture live call audio. | In Helper app: tap "Grant Audio Permission" → "While using the app" (or in App Info → Permissions → Microphone → Allow). |
3. Post NotificationsPOST_NOTIFICATIONS |
Required (Android 13+) | Runs ongoing foreground service notification so Android doesn't kill the recording process mid-call. | Prompted automatically during audio setup, or in App Info → Notifications → Allow. |
4. Battery OptimizationREQUEST_IGNORE_BATTERY_OPTIMIZATIONS |
Recommended | Prevents OEM task killers (Samsung OneUI, Xiaomi MIUI, etc.) from sleeping the background service. | Phone Settings → Apps → VoIP Recorder Helper → Battery → set to "Unrestricted". |
5. Modify Audio SettingsMODIFY_AUDIO_SETTINGS |
Auto-Granted | Switches communication device routing to speakerphone to acoustically capture the remote party. | Granted automatically by Android upon install. |
6. Microphone Foreground ServiceFOREGROUND_SERVICE_MICROPHONE |
Auto-Granted | Authorizes foreground microphone access when the screen turns off during a call. | Declared in Manifest; granted automatically by system. |
7. Internet & Network StateINTERNET · ACCESS_NETWORK_STATE |
Auto-Granted | Enables real-time crash and ANR telemetry dispatch to Firebase Crashlytics & Analytics. | Declared in Manifest; granted automatically by Android. |
The Google Play compliant user library, audio playback manager, and floating overlay provider.
| Permission / Setting | Type / Scope | Why It Is Needed | How & Where to Enable |
|---|---|---|---|
1. Display Over Other AppsSYSTEM_ALERT_WINDOW |
Required | Renders the floating "● REC · VoIP Engine Active" glowing badge over the WhatsApp in-call screen. | In Main App: tap "Enable Floating In-Call Widget" (or phone Settings → Apps → Special app access → Display over other apps → VoIP Call Recorder → Allow). |
2. Post NotificationsPOST_NOTIFICATIONS |
Recommended | Notifies you when call ingestion completes and a new recording is saved to your library. | Prompted on first launch, or in App Info → Notifications → Allow. |
3. Storage AccessfilesDir (Scoped Storage) |
No Permission Needed | Recordings are stored inside the app's sandboxed private directory. Broad storage permissions (e.g. MANAGE_EXTERNAL_STORAGE) are completely avoided. |
Handled locally by Android scoped storage with zero risk to personal photos or files. |
4. Package Visibility Queries<queries> |
Auto-Granted | Enables the Main App to verify if the Companion Helper, WhatsApp, and WhatsApp Business are installed. | Declared in Manifest; granted automatically by Android. |
5. Internet & Network StateINTERNET · ACCESS_NETWORK_STATE |
Auto-Granted | Enables real-time crash and ANR telemetry dispatch to Firebase Crashlytics & Analytics. | Declared in Manifest; granted automatically by Android. |
Tap VoipCallRecorder-1.0.0.apk above to install the main application. Grant the requested notification and floating widget permissions.
Tap VoipCallRecorder-Helper-1.0.0.apk to install the companion service. Open it once to initialize.
Android 13+ restricts accessibility services for sideloaded APKs by default. Follow this 15-second unlock:
Go to Settings → Accessibility → VoIP Recorder Helper Service and toggle it ON.
Test with a standard WhatsApp audio call. The floating status indicator appears, and upon call completion, your recording appears instantly in the Main App library!
Accessibility hook active for com.whatsapp & com.whatsapp.w4b.
Auto-speakerphone enabled to capture remote voice bleed.
Real-time PCM amplification enabled.
| Capability | VoIP Call Recorder Suite (Here) | VoiceVault (Single App) |
|---|---|---|
| Primary Target | Automated WhatsApp & WhatsApp Business calls | In-person meetings, lectures, voice memos |
| App Structure | Dual-App: Main UI + Sideloaded Companion Engine | Single, standalone Play-compliant APK/AAB |
| Trigger Mechanism | Automatic (hooks WhatsApp VoipActivity window) | One-touch (Widget, QS Tile, App Shortcut, Power key) |
| Accessibility Service | Used in Companion Helper only | None (0% risk of Play accessibility flags) |
| Speakerphone Assist | Auto-activates hardware speaker routing + 2.0x gain | Manual speakerphone recommendation |
| Audio Encoding | Real-time AAC / M4A (44.1 kHz, 16-bit PCM) | Direct MediaRecorder AAC / M4A (128 kbps) |
com.puliyal.voiprecordercom.puliyal.voiprecorder.helper# Built on headless Ubuntu Linux server (OpenJDK 17 + Android CLI SDK) export ANDROID_HOME=/home/waheed/android-sdk export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-arm64 # Helper APK cd /home/waheed/WhatsappRecorder/VoipCallRecorder/VoipCallRecorder-Helper ./gradlew assembleRelease # Main App APK cd /home/waheed/WhatsappRecorder/VoipCallRecorder/VoipCallRecorder-Main ./gradlew assembleRelease