2012-02-07 73 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);