刚开始的时候,认为在智能机中,每个 APP 都是各自管各自的,媒体播放也是这样子的;然而对比同类产品,发现同类产品可以放到播放自如,体验很好,通过对比研究,根源就在于音频焦点处理上。

一、引言
在功能机时代,系统是不允许有两个或多个音源播出,因为有优先级管理,但在智能机系统中,多个音源同时播放是被允许的,两个或更多的 Android 应用程序可以同时播放音频到相同的输出流。系统把所有东西混合在一起。虽然这在技术上是令人印象深刻的,但对用户来说却是非常令人恼火的,体验感极差。为了避免所有音乐应用同时播放,Android 引入了音频聚焦的概念。只有一个应用程序可以一次聚焦音频。
当应用程序需要输出音频时,它应该请求音频焦点。当它有焦点时,它可以播放声音。然而,在获得音频焦点后,可能无法持有它直到你播放完。另一个应用程序可以请求焦点,它会抢占你的音频焦点。如果出现这种情况,你的应用程序应该暂停播放或降低音量,让用户更容易听到新的音频源。
音频聚焦是合作的。鼓励应用程序遵守音频聚焦指南,但该系统不执行这些规则。如果一个应用程序想在失去声音焦点后继续大声播放,没有什么能阻止它。这是一种糟糕的体验,用户很有可能会卸载出现这种糟糕体验的应用程序。
二、音频焦点申请与释放
一个表现良好的音频应用程序应该管理音频焦点根据这些一般准则:
- 在开始播放之前立即调用 requestAudioFocus(),并验证调用是否返回 AUDIOFOCUS_REQUEST_GRANTED。如果按照参考设计中描述的那样设计应用程序,那么应该在媒体会话的 onPlay() 回调中调用 requestAudioFocus()。
- 当另一个应用程序获得音频焦点时,停止或暂停播放,或降低音量。
- 当播放停止,放弃音频

本文介绍了Android系统中的音频焦点概念,讨论如何申请、释放音频焦点以及对音频焦点变化的响应。良好的音频应用程序应当遵循音频焦点管理准则,如在播放前请求焦点,在失去焦点时暂停或降低音量。音频焦点的处理方式随Android版本不同而变化,从API 8到API 26以上,有不同实现方式。此外,文章还详细解释了瞬态失焦和永久失去焦点时的应用程序应对策略。
最低0.47元/天 解锁文章
2496

被折叠的 条评论
为什么被折叠?



