安卓 : Switching audio between Bluetooth and Phone Speaker is inconsistent

标签 android audio bluetooth

我的要求是根据用户选择在蓝牙和手机扬声器之间切换音频。 下面是代码 fragment :

//AudioTrack for incoming audio to play as below:

    int mMaxJitter = AudioTrack.getMinBufferSize(8000,               AudioFormat.CHANNEL_OUT_MONO,AudioFormat.ENCODING_PCM_16BIT);                                  
    new AudioTrack(AudioManager.STREAM_VOICE_CALL,8000,
           AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT,
           mMaxJitter, AudioTrack.MODE_STREAM);


//To register broadcast receiver for bluetooth audio routing
    IntentFilter ifil = new IntentFilter();
    ifil.addAction(AudioManager.ACTION_SCO_AUDIO_STATE_UPDATED);
    this.registerReceiver(<receiver instance>,ifil);

//To get AudioManager service
    AudioManager mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);

//Whenever user select to route audio to Bluetooth
    mAudioManager.setMode(AudioManager.MODE_IN_CALL);//tried setting with other mode also viz. MODE_NORMAL, MODE_IN_COMMUNICATION but no luck
    mAudioManager.startBluetoothSco();//after this I get AudioManager.SCO_AUDIO_STATE_CONNECTED state in the receiver
    mAudioManager.setBluetoothScoOn(true);
    mAudioManager.setSpeakerphoneOn(false);

//Whenever user select to route audio to Phone Speaker
    mAudioManager.setMode(AudioManager.MODE_NORMAL);
    mAudioManager.stopBluetoothSco();//after this I get      AudioManager.SCO_AUDIO_STATE_DISCONNECTED state in the receiver
    mAudioManager.setBluetoothScoOn(false);
    mAudioManager.setSpeakerphoneOn(true);

问题: 1. 我可以路由音频但行为不一致,有时它会路由到电话扬声器,即使用户选择路由到蓝牙(蓝牙已连接) 2.如果音频路由到手机扬声器,音量变小(请不要说检查手机音量) 3. 只有几次我可以观察到音频路由根据选择是正确的,如果我重复它会变得像我上面提到的那样奇怪。

安卓版本:Jellybean 4.3

有没有人遇到过类似的行为?

谢谢!

最佳答案

我得到了音频路由不一致的原因,这是因为我将手机扬声器设置为 false,而且我使用了不合适的模式... 以下组合对我有用:

//For BT
mAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
mAudioManager.startBluetoothSco();
mAudioManager.setBluetoothScoOn(true);

//For phone ear piece
mAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
mAudioManager.stopBluetoothSco();
mAudioManager.setBluetoothScoOn(false);
mAudioManager.setSpeakerphoneOn(false);

//For phone speaker(loadspeaker)
mAudioManager.setMode(AudioManager.MODE_NORMAL);
mAudioManager.stopBluetoothSco();
mAudioManager.setBluetoothScoOn(false);
mAudioManager.setSpeakerphoneOn(true);

安卓版本:4.3

谢谢!

关于安卓 : Switching audio between Bluetooth and Phone Speaker is inconsistent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22770321/

相关文章:

android - 如何在 android 中从 BackStack 加载 fragment

android - 如何在 android 中使用 intent 启动 viber

android - 仅播放一次声音

html - 如何停止和恢复 HTML5 中的实时音频流而不是暂停它?

android - 如何查询特定日期范围的android日历事件?

android - 导入 Holo everywhere 主题时出错

c# - 防止.NET语音识别听到/识别计算机扬声器

android - 从 G-Shock watch 蓝牙 android 获取 UUID

android - 在 Phonegap Android 中添加蓝牙插件

python 蓝牙 - 检查连接状态