[英]Is it possible in android to record the call during incoming or outgoing calls
在android中,是否可以在不打开手机扬声器的情况下在来电/去电过程中录制语音通话。 我曾在android市场上看到过一个应用程序。 它在不打开扬声器的情况下无法正确录制对方的声音,因为它使用麦克风进行录音。 可以通过其他一些技术来完成吗?
final MediaRecorder callrecorder = new MediaRecorder();
callrecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);
callrecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
callrecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
callrecorder.setOutputFile(recordPath);
callrecorder.prepare();
callrecorder.start();
将音频源设置为 MIC 对我有用..
CallRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
但并非所有设备都提供通话录音的硬件支持。 请参阅此 [链接]: http : //forum.xda-developers.com/showthread.php?t=926498 。
结果是,在某些电话中,呼叫者和被叫者的声音都被记录了下来,而在其他电话中,则只记录了说话者的声音。
您可以同时检查音频源MediaRecorder.AudioSource.VOICE_DOWNLINK
和MediaRecorder.AudioSource.VOICE_UPLINK
。
这个解决方案对我有用。
Callrecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_DOWNLINK | MediaRecorder.AudioSource.VOICE_UPLINK);
您可以按如下方式使用 MediaRecorder 类:
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Log.d(TAGS, "In M" + "In M");
Toast.makeText(this, "6.0", Toast.LENGTH_SHORT).show();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
} else if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Log.d(TAGS, "NNNN" + "NNNN");
recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
} else if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
Log.d(TAGS, "N_MR1" + "N_MR1");
recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
} else if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Log.d(TAGS, "O" + "O");
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
} else {
Log.d(TAGS, "ELSE" + "ELSE ");
recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
}
Android 手机(据我所知)有一个应用处理器和一个调制解调器处理器。 当电话处于语音呼叫中时,音频数据会直接从调制解调器处理器路由到音频硬件(除非有硬件更改)。 应用处理器完全不知道音频数据,但只知道呼叫状态。
因此,简而言之,如果没有适当的硬件支持,您将无法录制音频数据。
您需要使用MediaRecorder类,如下所示,
recorder = new MediaRecorder();
int audioSource = MediaRecorder.AudioSource.VOICE_CALL;
recorder.setAudioSource(audioSource);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
final String filePath = Environment.getExternalStorageDirectory() + "/record.3gpp";
final File file = new File(filePath);
file.getParentFile().mkdirs();
recorder.setOutputFile(filePath);
recorder.prepare();
recorder.start(); // Recording is now started
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.