Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android录制和播放+;可选择扬声器_Android_Audio_Audiorecord_Speakerphone - Fatal编程技术网

Android录制和播放+;可选择扬声器

Android录制和播放+;可选择扬声器,android,audio,audiorecord,speakerphone,Android,Audio,Audiorecord,Speakerphone,我正在为Android编写一个sip应用程序。在通话过程中,我必须录制麦克风输入并播放传入的音频。必须有一个可选的扬声器使用。它必须与安卓1.5+(1.5、1.6、2.0、2.1、2.2,未来版本)兼容,并且设备便携 嗯。因此,我使用AudioTrack播放传入音频,AudioRecord录制来自麦克风的数据,AudioManager.setPeakerPhone()启用或禁用扬声器 听起来很简单,但它并不像应该的那么简单。除非调用AudioManager.setMode(AudioManage

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

嗯。因此,我使用AudioTrack播放传入音频,AudioRecord录制来自麦克风的数据,AudioManager.setPeakerPhone()启用或禁用扬声器

听起来很简单,但它并不像应该的那么简单。除非调用AudioManager.setMode(AudioManager.MODE_在_调用中),否则AudioManager.setPeakerPhoneOn(false)不起作用。所以我必须处于通话模式

它仍然很简单,可以在我的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);
}

非常感谢 一月试一试

AudioManager音频=(AudioManager)context.getSystemService(context.audio\u服务); 音频.setRingerMode(AudioManager.RINGER\u模式\u正常)

 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); 
 }