Android 记录来电和去电

Posted

技术标签:

【中文标题】Android 记录来电和去电【英文标题】:Android Recording Incoming and Outgoing Calls 【发布时间】:2011-10-05 00:44:32 【问题描述】:

我想了解有没有一种方法可以记录 android 手机 2.2 及更高版本的来电和去电?

客户想要记录他们对客户的代理呼叫,以便以后可以用来填写一些材料。他们不想让客户在通话时等待,而是希望稍后再做。

这可能吗?我需要使用哪些 API?

【问题讨论】:

嗨,我在三星 S7 和 S8 上都遇到了同样的问题(没有得到对方的声音),否则我的 prog 在其他手机上运行得很好 有什么想法吗? ***.com/questions/45880954/… 【参考方案1】:

首先,您必须小心记录通话,因为不同国家/地区都有法律要求。

这里是blog post,介绍如何使用MediaRecorder 录制音频。

我没有尝试记录电话,但MediaRecorder Audiosource 中有一个选项:

VOICE_CALL - 语音呼叫上行 + 下行音频源 VOICE_DOWNLINK - 语音呼叫下行链路 (Rx) 音频源 VOICE_UPLINK - 语音呼叫上行链路 (Tx) 音频源

只要音频源选项有效,您就可以开始了。

【讨论】:

VOICE_CALL - 语音呼叫上行链路 + 下行链路音频源 VOICE_DOWNLINK - 语音呼叫下行链路 (Rx) 音频源 VOICE_UPLINK - 语音呼叫上行链路 (Tx) 音频源在 android 4.0 中不起作用你知道吗 嗨,我在三星 S7 和 S8 上遇到了同样的问题(没有得到对方的声音),否则我的 prog 在其他手机上运行得非常好任何想法?? 仅使用“博客文章”链接成功录制来电者声音。但是无法录制接收端的声音...为什么? 为了更清楚。这些音频源需要 CAPTURE_AUDIO_OUTPUT 权限。仅授予系统应用程序。第二件事 AudioSource.VOICE_COMMUNICATION 不需要该权限,并且在 7.0 之前的设备上运行良好。但这不会在运行 7.0 及更高版本的设备上录制对方的声音。 似乎只有系统应用可以使用VOICE_CALL、UPLINK和DOWNLINK。我在我的联想 Zuk Z2 plus 手机中尝试了很多通话记录器编码,有几个音频源,但没有一个可以用来录制接收者的声音。 Cube ACR 和自动通话记录器应用程序在我的手机中运行良好。任何人请告诉我他们如何实现它?【参考方案2】:

在安卓手机通话时点击菜单按钮进行录音,它将以 amr 格式存储对话,并在 sd 卡的根目录中存储最多 20 分钟的对话。

【讨论】:

【参考方案3】:

我正在使用麦克风录制通话以获得更好的支持和兼容性。

MediaRecorder recorder = new MediaRecorder();
recorder.reset();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
recorder.setOutputFile(your_desired_folder_path);
 try 
    recorder.prepare();
 catch (java.io.IOException e) 
    recorder = null;
    return;

recorder.start();

【讨论】:

抱歉,麦克风录制接收器的声音不是传入的用户声音。 我已经实现了这段代码,但来电几秒钟后开始录音。请提供时间管理的解决方案或建议 这只是打开麦克风并开始录音。它与通话无关。 是的,这是最好的录音方式,因为某些手机不允许录音。【参考方案4】:

我正在使用麦克风录制电话音频,并使用电话管理器查找通话状态。

private MediaRecorder recorder;

  recorder = new MediaRecorder();
        try 
            recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION);
            recorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);
            recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
            recorder.setAudioSamplingRate(44100);
            recorder.setOutputFile(your_desired_files_absoulte_path);
 catch (Exception e) 
e.printstacktrace ;

之后,您可以轻松地在任何您想要的地方开始录制

recorder.prepare();
recorder.start();

完成录制后,您也可以轻松停止录制

recorder.stop();
recorder.reset();
recorder.release();

【讨论】:

以上是关于Android 记录来电和去电的主要内容,如果未能解决你的问题,请参考以下文章

在 android API29+ 中检测来电和去电

无论如何要为Android中的来电和去电制作我的自定义用户界面吗?

如何注销来电和去电接收者?

Android 2.1+ 暂停来电/去电,完成后恢复

我可以在后台观察来电和去电吗?

在android中记录通信呼出和呼入