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

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

问题描述

我的要求是蓝牙与手机的扬声器之间切换音频根据用户的选择。
下面是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屋!

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