android developer
android developer

Reputation: 116020

How do some apps overcome phone recording restrictions?

Background

Phone recording is not really supported on Android, yet some devices support it to some extend.

This made various call recording apps gather as much possible information about devices and what should be done to them, and decide upon this what to do.

Some even offer root solutions.

One such example is boldbeast Call Recorder app, which offers a lot of various configurations to change:

enter image description here

The problem

If I'm in need to create a call recording app, there is no other way than to find the various workarounds for various devices, but as it seems other apps use terms that don't appear in the API.

I can't find any of those of the app I've mentioned, for example.

What I've found

Other than tons of questions of how to record calls on Android, showing that it doesn't work on all devices, I could find some interesting things. Here are my tries and insights so far:

The questions

As opposed to other similar questions about this topic, I'm not asking how to record calls. I already know it's a very problematic and complex problem. I already know I will have to address various configurations, and that I will probably use a server to store all of them and find there the best match for each one.

What I want to ask is more about the tweaking and workarounds :

  1. Is there a list of configurations for the various devices, Android versions, and what to choose for each?

  2. Besides Audio source, which other configuration is possible to be used?

  3. Which parameters are possible for the various devices and Android versions ? Are there any websites of the OEMs describing them?

  4. What are the various terms in the app I've mentioned? Where can I find information of how to change them?

  5. Which tools are available for rooted devices?

  6. Is it possible to know which device supports call recording and which not, by using the API ?

  7. About the workaround of OnePlus 2, to wait a moment till we start recording, why is it needed? Is it needed on all Android versions? Is it a known issue? Would 1 second be enough?

  8. How come on the Galaxy S7 I've failed to record the other side even when using MIC&speaker?


EDIT: I've found this of accessibility service being able to help with call recording:

https://developer.android.com/guide/topics/media/sharing-audio-input#voice_call_ordinary_app

Not sure how to use it though. It seems "ACR Phone Dialer" uses it. If anyone knows how it can be done, please let me know.

Upvotes: 47

Views: 10694

Answers (2)

android developer
android developer

Reputation: 116020

According to my tests, one way to improve this is to have an AccessibilityService being active (no need to write there anything at all) while choosing voice-recognition as the audio source. Also it's recommended to have the speaker turned on because this will record the audio from the microphone.

This seems to exist in some call-recording apps.

Weird thing is that Google has written this as a rule on the Play Store:

The Accessibility API is not designed and cannot be requested for remote call audio recording.

https://support.google.com/googleplay/android-developer/answer/11899428

No idea what the "remote" means here.

Anyway, I've updated the Github repository to include these additions.

Upvotes: 1

emandt
emandt

Reputation: 2736

I spent many weeks working on a Voicecall Recording App so I faced all your issues/questions/problems. Moreover: my project had a low-priority so I didn't spent much time every day on it, so I worked on this App for many months while Android was changing under the hood (minor an major releases).

I was developing always on the same Galaxy Note 5 using its stock ROM (without Root) but I discovered that on the same device the behaviour was changing from one Android release to another without any explanation. For example from Nougat 7.0 to 7.1.2 I was unable to record a voicecall using the same code as before.

Google has enforced_or_changed restrictions about voicecall recording many times. At the beginning it was sufficient to use use VOICE_CALL AudioSource. Then manufactures has started to interprete this Value as they wanted, and the result was that one implementation was working well but another was not. Then Reflection was needed to run undocumented/hidden methods to start voicecall recording. Then Google has added a Runtime check, so calling them directly was not more possible even using Reflection. However this method lack of stability because it was not guarantee that a method was using the same name on all devices.

Then I started to reverse-engineer currently working Apps that were working on newer Android version and I discovered that them were using a complete different and more secure approach. This takes me many weeks because all these Apps uses JNI Libraries trying to hide this method between Assembler code. When I succesfully create a Test App which was recording well I tried the SAME code in many different devices and ROMs/Versions and surprisely it was working well. This means that all those different methods you can see in these App Settings (I'm 98% sure about it) are just "fake" or just refers to OLD methods not more used.

A small different metion should be done for Rooted devices: these devices could change AudioRoutes so a different approach can be used in this case.

[1] There isn't any list or website listing all supported devices or best method to do a successfully voicecall record

[6] It's not possibile to know which device supports Voicecall Recording just using an API call. You have to try and catch Excepions...

[8] Recording by MIC+speaker suffers of many issues: (1) the caller will hear all your ambient sound so the privacy-bug is a big issue (2) the echo is a big problem (3) the recording volume is very low as the quality of recordered voice

Upvotes: 4

Related Questions