是否可以在android中记录来电或呼出时的通话

  • 本文关键字:来电 android 记录 是否 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.

结果是,在一些手机中,来电者和被来电者的声音都被记录了下来,而在另一些手机中只记录了说话者的声音。

据我所知,Android手机有一个应用程序处理器和一个调制解调器处理器。当电话进行语音通话时,音频数据会从调制解调器处理器直接路由到音频硬件(除非硬件发生变化)。应用程序处理器很幸运地不知道音频数据,但只知道呼叫状态。

因此,简而言之,如果没有适当的硬件支持,您将无法录制音频数据。

您可以使用音频源MediaRecorder.AudioSource.VOICE_DOWNLINK&CCD_ 2。

这个解决方案对我有效。

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);
}

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

最新更新