前面的文章已经介绍了,音频焦点策略用于处理多个音频的发出声音时,各个音频播放状态的改变。如果不对音频播放那个进行管理,那么多声音将会一起发出,这样会严重影响人们的体验,因此在开发过程中,如果存在音频相关的功能,必须要吧空音频焦点策略。
一、音频焦点仲裁机制
从前面的文章中可以看到,车机中的音频类型过于复杂,因此需要使用外部的音频策略去进行控制,但是仅仅通过代码去控制焦点不是很直观,因此,我们在 xml 文件中去设置了仲裁表,用于直观的观察不同的音频流类型相互的关系。
音频焦点仲裁流程:
- 在 CarAudioFocusPriority 中解析上面的 xml 文件;
- CarAudioFocus 根据音频焦点矩阵去设置焦点变换的策略;
- CarZonesAudioFocus 实现 AudioPolicy.AudioPolicyFocusListener,并且在 onAudioFocusRequest 中调用 CarAudioFocus 中的 onAudioFocusRequest;
- 最后在 CarAudioService 中构造 AudioPolicy,然后传入 CarZonesAudioFocus,并将 AudioPolicy 注册到 AudioService 中。
二、代码分析
下面我们就按照上面的仲裁流程对源码进