Android Can';不要用麦克风

Android Can';不要用麦克风,android,bluetooth,audio-streaming,voip,headset,Android,Bluetooth,Audio Streaming,Voip,Headset,我正在开发一个VoIP应用程序 在Galaxy Tab 4.0.4上使用蓝牙耳机时,我遇到以下问题: 在VoIP呼叫中间有语音呼叫,或者当我停止应用程序并重新启动应用程序时,它将不再使用蓝牙耳机麦克风。 当问题发生时,即使在停止和启动蓝牙适配器或蓝牙设备后,它仍将不使用蓝牙耳机麦克风。似乎只有重新启动adb才能解决问题 有一个我不完全理解的“肮脏”修复: 当从我的应用程序调用时出现问题: audioManager.setMode(audioManager.VOICE_呼叫) audioManag

我正在开发一个VoIP应用程序

在Galaxy Tab 4.0.4上使用蓝牙耳机时,我遇到以下问题:

在VoIP呼叫中间有语音呼叫,或者当我停止应用程序并重新启动应用程序时,它将不再使用蓝牙耳机麦克风。 当问题发生时,即使在停止和启动蓝牙适配器或蓝牙设备后,它仍将不使用蓝牙耳机麦克风。似乎只有重新启动adb才能解决问题

有一个我不完全理解的“肮脏”修复:

当从我的应用程序调用时出现问题:

audioManager.setMode(audioManager.VOICE_呼叫)

audioManager.setMode(audioManager.NORMAL)

将重新启用蓝牙耳机的麦克风

如果此通话一直有效,则足以解决问题,但存在一个问题:有时(约25%)在通话后,每次启用SCO时,我都会在蓝牙耳机上收听非常恼人的干扰

我猜它们与AudioManager文档中的以下评论有关: “尤其是,只有当电话应用程序拨打电话时,才应使用模式_In_CALL MODE,因为它会导致来自无线电层的信号馈送到平台混音器。”


问题是:关于什么可能导致以及如何避免被解释的问题,有什么想法吗?

我遇到了类似的情况。铃声偷走应用程序的音频焦点后,音频质量下降

如果您可以访问API级别11,我建议您使用
audioManager.setMode(MODE\u IN\u COMMUNICATION)
,因为这是用于VoIP呼叫的。仅此一项就可以提高您的音频质量。使用
MODE\u NORMAL
时,您可能会听到
MODE\u在通信中无法听到的回音

如果这还不够,请尝试在应用程序恢复音频焦点时重新建立音频。当我这样做的时候,我控制了服务中的音频,这样活动生命周期就不会影响它,但是音频焦点仍然需要注意,因为铃声和语音呼叫等会影响它。由于您提到应用程序的后台处理会损害音频,因此我建议将音频管理移动到服务,或者在
onResume()
中重新建立蓝牙连接。或者您的
onResume()
正在覆盖某些内容。没有代码示例很难判断

如果您没有音频焦点侦听器(API级别8),您可以这样设置:

OnAudioFocusChangeListener afChangeListener = new OnAudioFocusChangeListener() {
    public void onAudioFocusChange(int focusChange) {
        if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {
            AudioManager am = (AudioManager)getSystemService(AUDIO_SERVICE);
            am.setMode(MODE_IN_COMMUNICATION);
            //reestablish your bluetooth here, like you did originally
        } 
    }
};
当VoIP呼叫开始时,或在onCreate()期间,需要在某处设置侦听器:

完成调用后,不要忘记注销此侦听器

am.abandonAudioFocus(afChangeListener);

如果我将AudioManager设置为MODE_IN_通话噪音消失,其他手机可以清晰地接收和播放语音。但主叫手机(平板电脑)无法再播放其接收到的任何语音(双向通话)-解决方案是什么?请尝试“正常模式”或“通话中的正常模式”,而不是“通话中的正常模式”。是的,默认情况下,“正常模式”会导致另一侧出现噪音。发送接收语音时,我似乎需要切换音频模式。。不确定。
am.abandonAudioFocus(afChangeListener);