[英]Voice Call recording in android using MediaRecorder
我在錄制通話時遇到問題,我進行了一項服務並調用了BroadcastReceiver
以獲取通話狀態。 在TelephonyManager.EXTRA_STATE_OFFHOOK
中收到呼叫時。 我正在使用以下代碼來記錄通話
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
recorder.setOutputFile(audiofile.getAbsolutePath());
try {
recorder.prepare();
recorder.start();
}
catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception ex)
{
ex.printStackTrace();
}
這段代碼工作正常並創建了音頻文件,但是當我聽音頻文件時,我只能聽我傳出的聲音,沒有記錄來電者的聲音。
當我使用
recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);
代替
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
在上面的代碼中,它在 recoder.start() 上拋出了 recoder 失敗的異常;
那么,如何錄制語音通話呢?
一年前我也有同樣的疑問AudioSource.VOICE_CALL 不在 android 4.0 中工作,但在 android 2.3 中工作
recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL); 適用於有限的設備,它只會在不支持語音呼叫的設備上給出異常,因此捕獲異常並重新從麥克風開始錄音,這將使您在不受支持的設備中保持安全。
我認為我們不聽對方聲音的問題是無障礙訪問。 需要打開記錄器應用程序的輔助功能。 這樣問題就會得到解決。 也使用 recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION);
只要音量很低,您就無法錄制來電者的聲音。 這在編程上是不可能的,因為 AudioRecorder 或 MediaRecorder 只能通過麥克風錄音。 您唯一能做的就是將揚聲器的音量設置得盡可能大。
將 AudioSoucre 更改為 .MIC 無濟於事,有一個未解決的問題:
https://code.google.com/p/android/issues/detail?id=4075
這個問題直到現在還沒有解決,我認為將來也不會解決,因為在大多數國家/地區不允許錄制電話
MIC 的音頻源應記錄來電。 您可以將錄音音量設置為最大級別並打開揚聲器,如下所示:
//錄制AudioManager之前audioManager;
//turn on speaker
audioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
audioManager.setSpeakerphoneOn(true);
//increase Volume
audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, audioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL), 0);
//開始錄制
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
File audioFile = File.createTempFile("temp", "3gp", path);
recorder.setOutputFile(audioFile.getAbsolutePath());
recorder.prepare();
recorder.start();
還有其他常量可以與 setAudioSource() 一起使用,只需按照指南了解每個常量的工作原理
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.