最近在做视频会议,发现手机端的参与方听到声音是从听筒传出,于是想要把声音放到扬声器,实现如下:
在视频的页面添加:
mAudioManager=(AudioManager)getSystemService(Context.AUDIO_SERVICE);
mAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
mAudioManager.setSpeakerphoneOn(true);
再优化一下,可以注册广播接受器接受有线&蓝牙耳机的插入和拔出事件,
private class HeadsetPlugReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED.equals(action)) {
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
if(BluetoothProfile.STATE_CONNECTED == adapter.getProfileConnectionState(BluetoothProfile.HEADSET)) {
mAudioManager.setSpeakerphoneOn(false);
mAudioManager.setMode(AudioManager.MODE_NORMAL);
}else if (BluetoothProfile.STATE_DISCONNECTED==adapter.getProfileConnectionState(BluetoothProfile.HEADSET)){
mAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
mAudioManager.setSpeakerphoneOn(true);
}
} else if ("android.intent.action.HEADSET_PLUG".equals(action)) {
if (intent.hasExtra("state")) {
if (intent.getIntExtra("state", 0) == 1) {
mAudioManager.setSpeakerphoneOn(false);
mAudioManager.setMode(AudioManager.MODE_NORMAL);
}else if (intent.getIntExtra("state", 0) == 0){
mAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
mAudioManager.setSpeakerphoneOn(true);
}
}
}
}
}
把接收器注册上
private void registerHeadsetPlugReceiver(){
headsetPlugReceiver=new HeadsetPlugReceiver();
IntentFilter intentFilter=new IntentFilter();
intentFilter.addAction("android.intent.action.HEADSET_PLUG");
registerReceiver(headsetPlugReceiver,intentFilter);
IntentFilter bluetoothFilter=new IntentFilter();
bluetoothFilter.addAction(BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED);
registerReceiver(headsetPlugReceiver,bluetoothFilter);
}
特此记录,方便日后查看。