BCR
A Basic Call Recorder for rooted Android devices
Install / Use
/learn @chenxiaolong/BCRREADME
Basic Call Recorder
<img src="app/images/icon.svg" alt="app icon" width="72" />BCR is a simple Android call recording app for rooted devices or devices running custom firmware. Once enabled, it stays out of the way and automatically records incoming and outgoing calls in the background.
<img src="app/images/light.png" alt="light mode screenshot" width="200" /> <img src="app/images/dark.png" alt="dark mode screenshot" width="200" />
Features
- Supports Android 9 and newer
- Supports output in various formats:
- OGG/Opus - Lossy, smallest files, default on Android 10+
- M4A/AAC - Lossy, smaller files, default on Android 9
- FLAC - Lossless, larger files
- WAV/PCM - Lossless, largest files, least CPU usage
- Supports stereo recording (separate uplink and downlink channels)
- NOTE: This is only known to work on newer Pixel devices
- Supports Android's Storage Access Framework (can record to SD cards, USB devices, etc.)
- Direct boot aware (records calls prior to first unlock after a reboot)
- Auto-record rules
- Quick settings toggle
- No persistent notification unless a recording is in progress
- No network access permission
- Supports both Magisk and KernelSU
Non-features
As the name alludes, BCR intends to be a basic as possible. The project will have succeeded at its goal if the only updates it ever needs are for compatibility with new Android versions. Thus, many potentially useful features will never be implemented, such as:
- Support for old Android versions (support is dropped as soon as maintenance becomes cumbersome)
- Workarounds for OEM-specific battery optimization and app killing behavior
- Workarounds for devices that don't support the
VOICE_CALLaudio source (eg. using microphone + speakerphone) - Support for stock, unrooted firmware
Usage
-
Download the latest version from the releases page. To verify the digital signature, see the verifying digital signatures section.
-
Install BCR as a system app.
-
For devices rooted with Magisk/KernelSU, simply flash the zip as a Magisk/KernelSU module from within the respective application.
- For OnePlus and Realme devices running the stock firmware (or custom firmware based on the stock firmware), also extract the
.apkfrom the zip and install it manually before rebooting. This is necessary to work around a bug in the firmware where the app data directory does not get created, causing BCR to open up to a blank screen.
- For OnePlus and Realme devices running the stock firmware (or custom firmware based on the stock firmware), also extract the
-
For unrooted custom firmware, flash the zip while booted into recovery.
- NOTE: The
READ_CALL_LOGpermission is hard restricted in Android 10+, which prevents it from being granted, even via Android's settings. To remove this restriction, run via adb after rebooting back into Android:# If rooted, run inside of `su`: CLASSPATH=/system/priv-app/com.chiller3.bcr/app-release.apk app_process / com.chiller3.bcr.standalone.RemoveHardRestrictionsKt # If unrooted, install BCR as both a user app and a system app: pm install /system/priv-app/com.chiller3.bcr/app-release.apk - NOTE: If the custom firmware's
systempartition is formatted witherofs, then the filesystem is read-only and it is not possible to use this method. - Manually extracting the files from the
system/folder in the zip will also work as long as the files have644permissions and theu:object_r:system_file:s0SELinux label.
- NOTE: The
-
-
Reboot and open BCR.
If other call recorders are installed, make sure to disable their phone call recording functionality. On most devices, a phone call cannot be recorded by two apps at the same time. However, it is fine to have BCR record phone calls and another app record eg. VOIP calls.
-
Enable call recording and pick an output directory.
If no output directory is selected or if the output directory is no longer accessible, then recordings will be saved to
/sdcard/Android/data/com.chiller3.bcr/files. Note that on Android 12+,/sdcard/Android/data/is only accessible via USB or DocumentsUI (AOSP's built in file manager).When enabling call recording the first time, BCR will prompt for microphone, notification (Android 13+), call log, contacts, and phone permissions. Only microphone and notification permissions are required for basic call recording functionality. If additional permissions are granted, more information is added to the output filename. For example, the contacts permission will allow the contact name to be added to the filename.
See the permissions section below for more details about the permissions.
-
To install future updates, there are a couple methods:
- If installed via Magisk, the module can be updated right from Magisk Manager's modules tab. Flashing the new version in Magisk manually also works just as well.
- The
.apkcan also be extracted from the zip and be directly installed. With this method, the old version exists as a system app and the new version exists as a user-installed update to the system app. This method is more convenient if BCR is baked into the Android firmware image.
Recording announcement
Unlike the built-in call recording functionality of the preinstalled dialer app on some devices, BCR does not announce that the call is being recorded to the other party. BCR never outputs audio of any kind to the call audio stream.
When BCR is enabled, avoid using the dialer's built-in call recorder at all. There's a very good chance that using it will cause unexpected behavior, like both recordings failing or the dialer announcing that the call is being recorded.
If you live in a jurisdiction where two-party consent is required, you are responsible for informing the other party that the call is being recorded. If needed, auto-record rules can be used to discard recordings by default. However, note that if you choose to preserve the recording during the middle of the call, the recording will contain full call, not just the portion after the other party consented.
Direct boot
BCR is direct boot aware, meaning that it's capable of running and recording calls before the device is initially unlocked following a reboot. In this state, most of BCR's functionality will still work, aside from features that require the contact list or call log. In practice, this means:
- If auto-record rules are set up, the contact and contact group conditions will not match.
- It's not possible to manually preserve the recording if an auto-record rule is set to discard it because BCR's notification is not accessible before the initial unlock.
- The output filename, if using the default template, will only contain the caller ID, not the contact name or call log name.
However, if the device is unlocked before the call ends, then none of these limitations apply.
Note that the output directory is not available before the device is unlocked for the first time. Recordings made while in the state are stored in an internal directory that's not accessible by the user. After the device is unlocked, BCR will move the files to the output directory. This may take a few moments to complete.
Permissions
CAPTURE_AUDIO_OUTPUT(automatically granted by system app permissions)- Needed to capture the call audio stream.
CONTROL_INCALL_EXPERIENCE(automatically granted by system app permissions)- Needed to monitor the phone call state for starting and stopping the recording and gathering call information for the output filename.
RECORD_AUDIO(must be granted by the user)- Needed to capture the call audio stream.
FOREGROUND_SERVICE,FOREGROUND_SERVICE_MICROPHONE(automatically granted at install time)- Needed to run the call recording service.
POST_NOTIFICATIONS(must be granted by the user on Android 13+)- Needed to show notifications.
- A notification is required for running the call recording service in foreground mode or else Android will not allow access to the call audio stream.
READ_CALL_LOG(optional)- If allowed, the name as shown in the call log can be added to the output filename.
- This is also required to show the correct phone number when using call redirection apps.
READ_CONTACTS(optional)- If allowed, the contact name can be added to the output filename. It also allows auto-record rules to match contacts and contact groups.
RECEIVE_BOOT_COMPLETED,FOREGROUND_SERVICE_SPECIAL_USE(automatically granted at install time)- Needed to automatically move recordings made before the initial device unlock to the output directory.
READ_PHONE_STATE(optional)- If allowed, the SIM slot for devices with multiple active SIMs is added to the output filename.
VIBRATE(automatically granted at install time)- If vibration is enabled for BCR's notifications in Android's settings, BCR will perform the vibration. Android itself does not respect the vibration option when a phone call is active.
Note that INTERNET is not in the list. BCR does not and will never access the network. BCR will never communicate with other apps either, except if the user explicitly taps on the Open or Share buttons in the notification shown when a recording completes. In that scenario, the target app is granted access to that single recording only.
Call redirection
BCR has limited support for call redirection apps, like Google Voice. Redirected calls can be recorded only if the call redir
