AudioManager 蓝牙sco连接相关接口

本文介绍了蓝牙耳机的A2DP和SCO链路,A2DP用于高品质音乐传输,SCO则适用于语音通信。针对语音对讲应用,文章详细阐述了如何使用AudioManager接口在Android中设置和关闭SCO链路,以及在蓝牙耳机连接和断开时切换音频输出。同时,提供了判断蓝牙耳机连接状态和音频是否通过SCO传输的方法。
摘要由CSDN通过智能技术生成

蓝牙耳机连接之后,发现音频发声的还是终端,并没有转换到蓝牙耳机发声。网上搜索相关资料,发现是蓝牙耳机需要建立链路来播放音频。

简单介绍下蓝牙耳机的两种链路:A2DP(异步链路)及SCO(同步链路)。A2DP是一种单向的高品质音频数据传输链路,通常用于播放立体声音乐;而SCO则是一种双向的音频数据的传输链路,该链路只支持8K及16K单声道的音频数据,只能用于普通语音的传输。我试过建立SCO连接后播放音乐效果一般。SCO主要用来传输对时间要求很高的数据通信,可以录音也能播放。A2DP只能播放。我做的app是关于语音对讲的,设置SCO就可以了。

设置SCO的相关AudioManager接口
1.AudioManager简介
AudioManager 音频管理器,该类位于Android.Media包下。提供了音量控制与铃声模式相关操作。

//获得AudioManager对象实例

AudioManager am = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
2.具体接口
当蓝牙耳机连接后,将音频从终端转换到蓝牙耳机。蓝牙耳机断开后,将音频从蓝牙耳机转换到终端。

2.1打开SCO

/**
 * 进入SCO模式
 */
public void enterScoMode(){
  if(isBTConnected()){ //确保蓝牙连接
      AudioManager mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
      mAudioManager.startBluetoothSco(); //打开SCO;
      mAudioManager.setBluetoothScoOn(true); //蓝牙录音的关键,启动SCO连接,耳机话筒才起作用;
      setAudioMode(AudioManager.MODE_IN_COMMUNICATION);//将音频模式设为AudioManager.MODE_IN_COMMUNICATION,SCO才会真正生效。
  
  }
 
}


2.2关闭SCO

/**
 * 关闭SCO
 */
public void exitSCOMode(){
  AudioManager mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
  mAudioManager.setBluetoothScoOn(false);
  mAudioManager.stopBluetoothScoOn();
  mAudioManager.setAudioMode(AudioManager.MODE_NORMAL );
}


2.3判断通信是否使用蓝牙sco

isBluetoothScoOn()
2.4判断蓝牙耳机是否连接

public void isBTConncected(BluetoothHeadset mBluetoothHeadset){
    boolean bt = false;
    if(mBluetoothHeadset != null){
     List<BluetoothDevice> devices = mBluetoothHeadset.getConnectedDevices();
      if(devices != null && devices.size() > 0)
        bt = ture;
    }else{
      BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
       if(adapter.getProfileConnectionState(BluetoothProfile.HEADSET) == 
          BluetoothProfile.STATE_CONNECTED){
            bt = true;
        }
     }
   return bt;
 
}

3.蓝牙耳机与耳机、终端之间的音频转换
连接上蓝牙后,将音频从终端或者耳机上转换到蓝牙耳机输出;断开蓝牙后,将音频转换到终端或者耳机上输出。

public void changeAudioOutput(){
  if(isBTConnected()){
    enterSCOMode();
    audioManager.setSpeakerPhoneOn(false);
 
  }else{
    if(audioManager.isWiredHeadsetOn()){
       audioManager.setSpeakerPhoneOn(false);
    }else{
        audioManager.setSpeakerPhoneOn(true);
    }
 
  }
 
}
 
//连接蓝牙时
enterSCOMode();
 
//断开蓝牙连接时;
exitSCOMode();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值