Android : 在蓝牙和手机扬声器之间切换音频不一致 [英] Android : Switching audio between Bluetooth and Phone Speaker is inconsistent

查看:10
本文介绍了Android : 在蓝牙和手机扬声器之间切换音频不一致的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

My requirement is to switch audio between Bluetooth and phone speaker as per user selection. Below is the code snippet:

//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.只有几次我可以观察到音频路由是正确的,如果我重复它就会变得像我上面提到的那样奇怪.

Issues: 1. I'm able to route audio but Behavior is inconsistent, sometimes it routes to phone speaker even if user choose to route to bluetooth(bluetooth is connected) 2. If audio is routed to phone speaker, volume becomes low(please don't say check the phone volume) 3. Only a few times I could observe audio routing is proper as per choice, if I repeat it becomes weird as I mentioned above.

安卓版本:Jellybean 4.3

Android version: Jellybean 4.3

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

Has anyone faced something similar behavior ?

谢谢!

推荐答案

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

I got the reason of inconsistent audio routing, it was because I was setting phone speaker false, also I was using inappropriate mode... below combination worked for me:

//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

谢谢!

这篇关于Android : 在蓝牙和手机扬声器之间切换音频不一致的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆