某些应用如何克服 phone 录制限制?

How do some apps overcome phone recording restrictions?

背景

Phone Android 并不真正支持录制,但某些设备在一定程度上支持它。

这使得各种通话录音应用程序尽可能多地收集有关设备的信息以及应该对它们执行的操作,并据此决定要执行的操作。

有些甚至提供根解决方案。

一个这样的例子是boldbeast Call Recorder app,它提供了很多不同的配置来改变:

问题

如果我需要创建一个通话录音应用程序,除了为各种设备找到各种解决方法外别无他法,但似乎其他应用程序使用的术语未出现在 API.

例如,我找不到我提到的任何应用程序。

我发现了什么

除了关于如何在 Android 上记录通话的大量问题,表明它不适用于所有设备,我还可以找到一些有趣的东西。到目前为止,这是我的尝试和见解:

问题

与关于此主题的其他类似问题不同,我不是在问如何记录通话。我已经知道这是一个非常棘手和复杂的问题。我已经知道我将不得不处理各种配置,而且我可能会使用服务器来存储所有配置,并在其中找到每个配置的最佳匹配。

我想问的是更多关于调整和解决方法的问题:

  1. 是否有各种设备、Android 版本的配置列表,以及为每个版本选择什么?

  2. 除了Audio source,还有哪些配置可以使用?

  3. 哪些参数适用于各种设备和 Android 版本?是否有 OEM 的网站描述它们?

  4. 我提到的应用程序中的各种术语是什么?我在哪里可以找到有关如何更改它们的信息?

  5. 哪些工具可用于 root 设备?

  6. 是否可以通过API知道哪个设备支持通话录音,哪个不支持?

  7. 关于OnePlus 2的解决方法,稍等片刻,我们开始录制,为什么需要它?所有 Android 版本都需要它吗?这是一个已知问题吗? 1秒够吗?

  8. 怎么我的Galaxy S7用MIC&speaker也录不到另一边?


编辑:我发现无障碍服务能够帮助通话录音:

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

但不确定如何使用它。似乎 "ACR Phone Dialer" 使用它。如果有人知道怎么做,请告诉我。

我花了很多周时间开发语音通话录音应用程序,所以我面对了你们所有的 issues/questions/problems。 此外:我的项目优先级较低,所以我每天都没有花太多时间在它上面,所以我在这个应用程序上工作了好几个月,而 Android 正在改变(次要版本和主要版本)。

我一直在同一个 Galaxy Note 5 上使用其库存 ROM(没有 Root)进行开发,但我发现在同一台设备上,行为从一个 Android 版本更改为另一个版本,没有任何解释。 例如,从 Nougat 7.0 到 7.1.2,我无法使用与以前相同的代码录制语音通话。

Google多次对语音通话录音有enforced_or_changed限制。 一开始用use VOICE_CALL AudioSource就够了。然后制造商开始按照他们的意愿解释这个价值,结果是一个实施工作良好,而另一个则不然。 然后需要反射 运行 undocumented/hidden 方法来开始语音通话记录。 然后 Google 添加了运行时检查,因此即使使用反射也不可能直接调用它们。 但是这种方法缺乏稳定性,因为它不能保证一个方法在所有设备上使用相同的名称。

然后我开始对当前正在运行的应用程序进行逆向工程,这些应用程序正在更新的 Android 版本上运行,我发现它们使用的是一种完全不同且更安全的方法。这花了我很多周的时间,因为所有这些应用程序都使用 JNI 库,试图在汇编程序代码之间隐藏此方法。 当我成功创建一个记录良好的测试应用程序时,我在许多不同的设备和 ROMs/Versions 中尝试了相同的代码,令人惊讶的是它运行良好。 这意味着您可以在这些应用程序设置中看到的所有这些不同的方法(我对此有 98% 的把握)只是 "fake" 或者只是指不再使用的旧方法。

对于 Root 设备应该做一个小的不同的处理: 这些设备可能会更改 AudioRoutes,因此在这种情况下可以使用不同的方法。

[1] 没有任何列表或网站列出所有支持的设备或成功进行语音通话记录的最佳方法

[6]无法知道哪个设备支持语音通话录音 仅使用 API 调用。你必须尝试捕捉异常...

[8] MIC+扬声器录音有很多问题:(1) 来电者会听到你所有的环境声音,所以隐私问题是个大问题(2) 回声是个大问题(3)由于录音质量

,录音音量很低

根据我的测试,一种改进方法是在选择 voice-recognition 作为音频源时让 AccessibilityService 处于活动状态(根本不需要在那里写任何东西)。另外建议打开扬声器,因为这会记录来自麦克风的音频。

这似乎存在于某些 call-recording 应用程序中。

奇怪的是 Google 在 Play 商店上写下了这条规则:

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

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

不知道这里的“远程”是什么意思。

无论如何,我已经更新了 Github 存储库以包含这些新增内容。