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 记录来电和去电的主要内容,如果未能解决你的问题,请参考以下文章