使用情景
在音视频app开发中一般会遵循音频焦点的机制,播放时申请音频焦点,丢失焦点后暂停播放,恢复焦点后继续播放等。尤其在车载开发时,涉及到三方应用和自研应用,导致经常出现音频焦点混乱混音等问题。
private fun requestAudioFocus() {
getSystemService<AudioManager>()?.apply {
val result = requestAudioFocus({
Logger.d(TAG, "onAudioFocusChange: $it")
}, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN)
Logger.d(TAG, "requestAudioFocus ==> $result")
}
}
调用流程
整体是一个IPC调用流程,MediaFocusControl中维护了一个焦点栈,当栈数据发生变化时,会分发焦点状态给调用客户端