android 用蓝牙耳机听音乐,插上有线耳机后,音乐从有线耳机播放,拔出有线耳机,声音没有从蓝牙耳机传出。
看源码时我们会发现,代码的逻辑是,通常会把后一次连接的设备作为活动设备。意思就是先连接蓝牙耳机,之后连接有线耳机,声音会从有线耳机里面传出。 按道理来说,拔掉有线耳机之后,只要蓝牙耳机还跟手机连接,那么声音就会从蓝牙耳机传出。为什么没有呢 ?因为原生的代码中,对这里做了限制。
if (hasAddedWiredDevice) {
Log.d(TAG,"hasAddedWiredDevice");
wiredAudioDeviceConnected();
}
我们可以看到有线耳机连接之后会执行wiredAudioDeviceConnected()方法,直接来看此方法
/**
* Called when a wired audio device is connected.
* It might be called multiple times each time a wired audio device is connected.
*/
@VisibleForTesting
void wiredAudioDeviceConnected() {
if (DBG) {
Log.d(TAG, "wiredAudioDeviceConnected");
setA2dpActiveDevice(null);
setHfpActiveDevice(null);
setHearingAidActiveDevice(null);
}
可以看见有三个set操作,第一个就把我们的蓝牙设备置空了。所以我们在拔出有线耳机之后,声音不会从蓝牙耳机出来,而是通过系统默认的扬声器传出。
如果我们想要修改这个播放通道,使拔掉有线耳机之后,声音能从蓝牙耳机传出。只需要不让蓝牙设备置空,有两种方式:1.注释掉wiredAudioDeviceConnected()方法; 2.注释掉setA2dpActiveDevice(null)。
|