簡體   English   中英

使用 MediaRecorder 在 android 中進行語音通話錄音

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM