繁体   English   中英

在 android 中是否可以在来电或去电过程中记录通话

[英]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_DOWNLINKMediaRecorder.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM