安卓:蓝牙和手机扬声器之间切换音频不一致 [英] Android : Switching audio between Bluetooth and Phone Speaker is inconsistent
问题描述
我的要求是蓝牙与手机的扬声器之间切换音频根据用户的选择。
下面是code片断:
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.
Android版本:4.3的Jellybean
Android version: Jellybean 4.3
有没有人遇到一些类似的行为?
Has anyone faced something similar behavior ?
谢谢!
推荐答案
我有不一致的音频路由的原因,那是因为我设置手机喇叭假的,我也用不恰当的方式...
下面结合为我工作:
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);
Android版本:4.3
Android version: 4.3
谢谢!
这篇关于安卓:蓝牙和手机扬声器之间切换音频不一致的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!