我想了解有没有办法在Android手机2.2及以上版本上记录来电和外拨电话?
客户希望记录他们对客户进行的代理的调用,以便以后可以用它来填写一些材料.而不是让客户端在通话时等待他们想要稍后再做.
这是可能的,我需要使用哪些API?
Android上并不支持手机录音,但有些设备在某种程度上支持它.
这使得各种呼叫录制应用收集了关于设备的可能信息以及应该对它们做什么,并决定该做什么.
有些甚至提供根解决方案.
一个这样的例子是boldbeast Call Recorder应用程序,它提供了许多不同的配置来改变:
"记录模式".显示非root用户设备的14种模式,root用户最多34种模式.对于root设备,还显示"Alsa mode"作为它的选项.
具有"调谐音频效果"("自动调整一组参数").
具有"调谐音频路由",可能的值为"已禁用","组1","组2","组3"
对于有根设备:
"更改音频控件"("自动更改音频控件")
"更改音频驱动程序"(更改音频驱动器设置以启用记录模式21,22,23,24,31,32,33,34")
对于有根设备:"开始输入流"
如果我需要创建一个呼叫录制应用程序,除了找到各种设备的各种解决方法之外别无他法,但似乎其他应用程序使用API中没有出现的术语.
例如,我找不到我提到的任何应用程序中的任何一个.
除了大量关于如何在Android上录制电话的问题,显示它不适用于所有设备,我可以找到一些有趣的东西.以下是我到目前为止的尝试和见解:
我们可以在准备录音时使用一些录音源(这里是文档),但遗憾的是在每个设备中它可能会有所不同.对于一些人来说,VOICE_CALL是有效的,对某些人来说也是如此.但至少我们可以尝试......
在安装了Android 6.0.1的OnePlus 2上,可以使用VOICE_CALL录制来电,但是我无法在那里录制拨出电话,除非我将MIC作为音频源与扬声器开启一起使用.不知何故,我提到的应用程序成功录制它没有任何问题.我相信我会看到其他Android设备的其他问题,因为我过去曾试图解决这个问题.更新:我发现了这个示例项目(也在这里),由于某种原因,它在UI线程prepare和startmediaRecorder调用之间休眠2秒.它工作正常,当我做类似的事情(等待使用Handler.postDelayed 1秒),它也工作得很好.在那里写的评论是"有时准备需要一些时间才能完成".
在使用Android 8的Galaxy S7上,无论我做了什么,我都无法获得传出呼叫和来电(即使是MIC和扬声器)的另一方声音,但我提到的应用程序运行正常.
为了让你尝尝我的通话录音的POC,我已经发表了开放源代码的github仓库在这里,有一个样品,将记录一个电话,让你聆听到最新的一个,如果一切运作良好.
这个"ViktorDegtyarev - CallRecLib"SDK似乎根本不起作用,并在各种Android版本上崩溃
这两个旧的示例项目:rvoix,esnyder-callrecorder,都无法实际记录.第二个似乎甚至不适用于它应该支持的Android 6.0.1设备.
aykuttasil - CallRecorder示例和 axet - android-call-recorder示例 - 两者,就像在我的POC上一样,除了AudioSource之外没有任何调整,因此他们无法记录某些情况,例如OnePlus 2输出 -拨出电话的音频.
大多数第三方应用程序仅提供AudioSource调整,但有些(如"boldbeast")确实提供更多.一个例子是" 自动呼叫记录器 ",其具有"配置"(10个值可供选择,首先是"默认")和"方法"(5个值可供选择,首先是"默认").这些应用程序可能不希望其他人理解这些配置的含义,因此他们会使用通用名称.或者,它对每个人来说都太复杂了(特别是对于用户而言),所以他们概括了名称.
有"setMode"的API 在这里,但它似乎并不在调用它改变.我想也许可以通过这种方式改变呼叫使用位置的"通道",但它不起作用.它在调用期间保持为"2"的值,即MODE_IN_CALL.
有各种设备可用的自定义参数(每个OEM及其自己的参数),这些参数可以在这里设置,甚至可以通过JNI( …
因此,我尝试开发一个通话录音应用程序:
我想我无法理解 VOICE_DOWNLINK 和 VOICE_UPLINK 的概念。并且知道 VOICE_CALL 已被弃用。所以,我陷入了困境,需要一些专家的建议。
我想在通话期间录制来电和拨出线路的语音.我尝试了许多解决方案,否则可以在Moto Phones以外的设备上工作(在我的情况下,我已经尝试过Moto E(第二代),Moto G5和Moto C).我试过这两个库:
03-07 10:56:57.307 293-9261 /?E/AudioRecord:无法获取记录源4的音频输入,采样率8000,格式0x1,通道掩码0x10,会话3494,标志0 03-07 10:56:57.308 293-9261 /?E/StagefrightRecorder:音频源未初始化03-07 10:56:57.309 7290-7290/com.callrecorder.android E/MediaRecorder:开始失败:-2147483648 03-07 10:56:57.314 7290-7290/com.callrecorder .android E /呼叫记录器:无法设置记录器.java.lang.RuntimeException:启动失败.在android.app.MediaRecorder.start(Native Method)的com.callrecorder.android.RecordService.startRecording(RecordService.java:194)at com.callrecorder.android.RecordService.onStartCommand(RecordService.java:92)at android.app .ActivityThread.handleServiceArgs(ActivityThread.java:3028)位于android.app.Handler.dispatchMessage上的android.app.ActivityThread.-wrap17(ActivityThread.java)android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1452) (Handler.java:102)在android.app.Looper.loop(Looper.java:148)的android.app.ActivityThread.main(ActivityThread.java:5443)java.lang.reflect.Method.invoke(Native Method) )com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:728)com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
根据官方Android文档
从VOICE_CALL源捕获需要CAPTURE_AUDIO_OUTPUT权限.此权限保留供系统组件使用,不可用于第三方应用程序.
因此,我尝试将AudioSource更改为AudioSource.VOICE_COMMUNICATION无崩溃的工作.但是无法记录传入的声音.它只记录传出的声音.我尝试过同样AudioSource.DEFAULT但又没有运气.它的行为与...相同AudioSource.VOICE_COMMUNICATION
这个库在NDK级别有一些调整.但是,这也给出了与上面的库相同的结果AudioSource.VOICE_COMMUNICATION
根据MOTO的官方论坛,这个讨论主题摩托罗拉官员表示,他们不支持内部的VOICE CALL录制,但某些第三方应用程序可能会这样做.哪个是对的.Play商店中的自动呼叫记录器应用程序提供相同的工作解决方案.我无法找到它做了什么样的修改,这给了它一个有效的解决方案.任何帮助,将不胜感激
我正在尝试使用flutter,CallKit(iOS)和ConnectionService(Android)使电话录音与本机UI集成一起使用。
由于没有关于将flutter与CallKit和ConnectionService或任何其他服务集成以实现无需root访问权限或越狱即可进行类似于系统的呼叫记录的指南,因此这个问题已经存在。有许多可用于越狱设备的应用程序,而android本身支持呼叫记录,但是没有具体的指南来实现使用flutter的实现。
将flutter 1.7与AndroidX支持结合使用可实现棉花糖+ ConnectionService的向后兼容性。
预期结果是自动记录呼叫或提示用户在有来电时进行记录。
当前根本无法做到这一点,也许我缺少文档中必不可少的东西,或者我没有足够的专门知识来成功执行使用flutter创建系统支持的呼叫记录应用程序。
我正在开发一个Android用于录制通话的应用.这是我的代码片段.
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
recorder.setOutputFile(file_path);
Run Code Online (Sandbox Code Playgroud)
这对于android 7 以下的设备非常有效,但是当我使用Android 7移动设备时,我只能听到外出的声音,但听不到传入的声音.
任何人都可以帮我解决它吗?
我正在使用自动通话记录器应用程序,我可以使用MediaRecorder.AudioSource.VOICE_CALL在 android Marshmallow 下录制语音通话,从 android marshmallow 无法使用 VOICE_CALL 录制语音通话。我设法使用MediaRecorder.AudioSource.MIC进行录制,但这里传入的语音没有被录制,我想在正常模式下录制语音通话,而不是在扬声器模式下。我尝试了很多例子并搜索了很多然后我写了这个问题。请帮我。谷歌播放有一个应用程序可以记录通话中的双方语音,名为“通话记录器 - 自动通话记录器”它在棉花糖中是如何工作的,还有其他方法可以记录通话吗?
int Media;
if (Build.VERSION.SDK_INT >= 24) {
Media = MediaRecorder.AudioSource.VOICE_COMMUNICATION;
}else if (Build.VERSION.SDK_INT==23){
Media = MediaRecorder.AudioSource.MIC;
}
else{
Media = MediaRecorder.AudioSource.VOICE_CALL;
}
CallRecord callRecord = new CallRecord.Builder(this)
.setRecordFileName("")
.setRecordDirName("CallRecord")
.setRecordDirPath(Environment.getExternalStorageDirectory().getPath())
.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB)
.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB)
.setAudioSource(Media)
.setShowSeed(true)
.build();
callRecord.startCallRecordService();
Run Code Online (Sandbox Code Playgroud) android phone-call recording android-6.0-marshmallow call-recording
我真的对Android中的通话录音感兴趣。但是,您已经知道android正式关闭了android 9中的语音通话记录。但是就在Android 10发行(2019年9月3日)之后,在浏览其新发行说明时,我遇到了以下页面,该页面看起来很有希望通话录音。 https://developer.android.com/guide/topics/media/sharing-audio-input。在这里,有关语音通话录音的内容如下。
语音通话+普通应用程序
如果AudioManager.getMode()返回的音频模式为MODE_IN_CALL或MODE_IN_COMMUNICATION,则语音通话处于活动状态。
Android根据以下规则共享输入音频:
呼叫始终会接收音频。如果该应用是无障碍服务,则可以捕获音频。如果该应用是具有权限CAPTURE_AUDIO_OUTPUT的特权(预安装)应用,则该应用可以捕获语音呼叫。
要捕获语音呼叫的上行链路(TX),下行链路(RX)或两者,应用必须指定音频源MediaRecorder.AudioSource.VOICE_UPLINK或MediaRecorder.AudioSource.VOICE_DOWNLINK和/或设备AudioDeviceInfo.TYPE_TELEPHONY。
因此,阅读本文后,我尝试在辅助功能服务中捕获音频。这是我的代码。 无障碍服务
public class MyAccessibilityService extends AccessibilityService {
FrameLayout mLayout;
public MyAccessibilityService() {
}
@Override
public void onAccessibilityEvent(AccessibilityEvent accessibilityEvent) {
}
@Override
public void onInterrupt() {
}
@Override
protected void onServiceConnected() {
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
mLayout = new FrameLayout(this);
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.type = WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY;
lp.format = PixelFormat.TRANSLUCENT;
lp.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
lp.width = WindowManager.LayoutParams.WRAP_CONTENT;
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
lp.gravity = Gravity.TOP;
LayoutInflater inflater = LayoutInflater.from(this);
inflater.inflate(R.layout.action_bar, mLayout); …Run Code Online (Sandbox Code Playgroud) 我正在开发一个在 android 中录制 VOIP 通话的项目,我没有找到任何解决方案,有很多应用程序支持手机上的 VOIP 录音。我找不到任何教程和帮助。Cube Call Recorder是提供此功能的应用程序之一,但我不知道该怎么做。我通过使用 android MediaRecorder开始录音然后启动 whatsapp 呼叫进行了测试,因此其他人无法听到我的声音。通话后,我检查了录音中只保存了我的声音。
作为一项研究,我对一些 apk 进行了逆向工程,我发现它们在 apk 中使用了辅助功能权限。
<uses-permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE" />
Run Code Online (Sandbox Code Playgroud)
我不知道我需要了解哪些事情,我怎样才能知道 VOIP 呼叫来来去去,就像BroadcastReceiver 一样。
然后,我将了解如何记录通话。
我创建了一个服务和广播接收器来获得电话状态.
以下是我的代码:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
final IntentFilter filter = new IntentFilter();
filter.addAction(ACTION_OUT);
filter.addAction(ACTION_IN);
if (br_call == null) {
br_call = new CallBr();
registerReceiver(br_call, filter);
}
return super.onStartCommand(intent, flags, startId);
}
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(ACTION_IN)) {
if ((bundle = intent.getExtras()) != null) {
state =bundle.getString(TelephonyManager.EXTRA_STATE);
Log.d("tag", "state ::" + state);
if (!wasRinging) {
if(state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
inCall=bundle.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
wasRinging = true;
Toast.makeText(context, "IN : " + inCall, Toast.LENGTH_LONG).show();
}
}
if(state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)){ …Run Code Online (Sandbox Code Playgroud) call-recording ×10
android ×9
flutter ×2
phone-call ×2
recording ×2
android-10.0 ×1
audio ×1
audio-source ×1
call ×1
callkit ×1
ios ×1
java ×1
voip-android ×1
whatsapp ×1