在做蓝牙带屏音箱项目的时候,碰到一个问题,具体是在连接蓝牙音箱回连的时候,播放音乐会在手机端点击播放过一会就回被暂停。
调试了一下问题后,大概问题是这样的,一般情况下,我们在播放音乐时会请求系统音频焦点,然后在不播放的时候释放焦点。
我也是按照这种逻辑处理的,但和一般情况不同的是,我应用所在的底层系统是经过定制的,而在音频焦点的处理上,除了我上层应用会在蓝牙播放变化的时候请求焦点,底层的系统也会做同样的操作,这就造成了在两者来回请求的过程中,焦点丢失了。
这种问题还是比较少见的,所以记录一下,而最终的解决办法是让提供定制系统的硬件方解决。不过这里也记录一下对于音频焦点请求和监听的学习。
完整的代码
1 | public class MusicService extends Service { |
需要解释一下的是,在 onAudioFocusChange
方法里的返回值代表了当前焦点变化的状态
常量 | 说明 |
---|---|
AUDIOFOCUS_GAIN | 持有焦点 |
AUDIOFOCUS_LOSS | 失去焦点 |
AUDIOFOCUS_LOSS_TRANSIENT | 临时失去焦点 |
AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK | 临时失去焦点,允许小声播放 |