是否有可能在Android中记录来电或拨出电话

ego6inou  于 2022-12-28  发布在  Android
关注(0)|答案(5)|浏览(167)

在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();
xggvc2p6

xggvc2p61#

将音频源设置为MIC对我很有效。

CallRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);

但并非所有设备都提供呼叫录音的硬件支持。请参考此[链接]:http://forum.xda-developers.com/showthread.php?t=926498.
结果是,在一些电话中,主叫方和被叫方的声音都被记录下来,而在另一些电话中,只有说话者的声音被记录下来。

mzsu5hc0

mzsu5hc02#

Android手机(据我所知)有一个应用程序处理器和一个调制解调器处理器。当手机进行语音通话时,音频数据会直接从调制解调器处理器路由到音频硬件(除非硬件发生变化)。应用程序处理器完全不知道音频数据,只知道通话状态。
因此,简而言之,如果没有适当的硬件支持,您将无法录制音频数据。

oxiaedzo

oxiaedzo3#

您可以同时使用音频源MediaRecorder.AudioSource.VOICE_DOWNLINKMediaRecorder.AudioSource.VOICE_UPLINK进行检查。
这个解决方案对我很有效。

Callrecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_DOWNLINK | MediaRecorder.AudioSource.VOICE_UPLINK);
1zmg4dgp

1zmg4dgp4#

您可以按如下方式使用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);
}
30byixjq

30byixjq5#

您需要使用**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

相关问题