2012-02-07 64 views
5

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

雖然它可以記錄,但在一些國家,它是非法的,前不久我們已經取得了黑莓應用程序,但該被禁止因違反某些隱私法的。 – Yuvi 2012-02-07 06:46:27

+0

是的,這是可能的,請檢查[this](http://stackoverflow.com/questions/6839297/record-call-in-android-2-2)鏈接。您還可以找到用於記錄的示例代碼。 – Lucifer 2012-02-07 06:38:05

+0

有沒有可能打開移動揚聲器? – shyam 2012-02-07 06:41:45

回答

2

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

有沒有可能打開移動揚聲器? – shyam 2012-02-07 06:41:45

+0

任何設備限制? – shyam 2012-02-07 06:42:05

0

Android手機(據我所知)具有應用處理器和調制解調器處理器。當電話處於語音呼叫中時,音頻數據將直接從調制解調器處理器路由到音頻硬件(除非發生硬件更改)。應用程序處理器對音頻數據沒有意識,但只知道通話狀態。

因此,總之,如果沒有適當的硬件支持,您將無法錄製音頻數據。

+0

哪種類型的硬件支持所需的Android所沒有的版本..有Android版本的限制嗎? – shyam 2012-02-07 07:22:55

+0

它與Android的版本無關。硬件支持意味着要從調制解調器處理器嚮應用處理器提取PCM線路。 – santosh 2012-02-07 07:28:31

0

音頻源設置爲MIC爲我工作..

CallRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 

但並不是所有的設備提供電話錄音的硬件支持。請參閱此鏈接:http://forum.xda-developers.com/showthread.php?t=926498

結果是,在一些電話中,主叫方和被叫方的聲音都被記錄下來,而在其他電話中僅記錄了說話者的聲音。

0

您可以同時檢查音頻源MediaRecorder.AudioSource.VOICE_DOWNLINK & MediaRecorder.AudioSource.VOICE_UPLINK

此解決方案適用於我。

Callrecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_DOWNLINK | MediaRecorder.AudioSource.VOICE_UPLINK); 
相關問題