Android录音和播放+免提电话作为选项

时间:2010-11-16 15:37:46

标签: android audio audiorecord speakerphone

我正在为Android编写一个sip应用程序。在通话期间,我必须录制麦克风输入并播放传入的音频。必须有扬声器电话的可选使用。它必须兼容Android 1.5+(1.5,1.6,2.0,2.1,2.2,未来版本)和设备便携式。

行。所以我使用AudioTrack播放传入的音频,AudioRecord用于录制麦克风和AudioManager.setSpeakerphoneOn()以启用或禁用免提电话。

听起来很简单,但并不像应该的那样简单。除非调用AudioManager.setMode(AudioManager.MODE_IN_CALL),否则AudioManager.setSpeakerphoneOn(false)不起作用。所以我必须在MODE_IN_CALL。

仍然可以简单,它适用于我的G1与Android 1.6,较旧的三星手机,模拟器,许多我们的客户设备等。但它无处不在:(

在三星平板电脑GT-P1000上,我得到0,0,0,0 ......的流作为麦克风输入。我认为同样的问题出现在摩托罗拉手机上(客户抱怨)。经过一些测试后,我意识到它是由AudioManager.setMode(AudioManager.MODE_IN_CALL)引起的。这会导致麦克风在某些设备上无法使用。但我必须打电话给它,否则我无法禁用免提电话。

有一种简单的方法可以使它变得简单,正确和有效吗?如果可能的话,没有像Sipdroid这样高度危险的源代码:

if (RtpStreamReceiver.samsung) {
    AudioManager am = (AudioManager) Receiver.mContext.getSystemService(Context.AUDIO_SERVICE);
    am.setMode(AudioManager.MODE_IN_CALL);
    am.setMode(AudioManager.MODE_NORMAL);
}

 void initMode() {
     samsung = Build.MODEL.contains("SAMSUNG") || Build.MODEL.contains("SPH-") ||
     Build.MODEL.contains("SGH-") || Build.MODEL.contains("GT-");

     if (Receiver.call_state == UserAgent.UA_STATE_INCOMING_CALL &&
     (Receiver.pstn_state == null || Receiver.pstn_state.equals("IDLE"))) {
       setMode(AudioManager.MODE_NORMAL); 
 }

非常感谢 扬

1 个答案:

答案 0 :(得分:1)

试一试........

AudioManager audio =(AudioManager)context.getSystemService(Context.AUDIO_SERVICE); audio.setRingerMode(AudioManager.RINGER_MODE_NORMAL);