理解Android音频焦点

在Android系统中可能会有多个应用程序会播放音频,所以需要考虑他们之间该如何交互,为了避免多个应用程序同时播放音乐,Android 系统使用音频焦点来进行统一管理,即只有获得了音频焦点的应用程序才可以播放音乐。

我们的应用在开始播放音频文件前,首先应该请求获得音频焦点,并且应该同时注册监听音频焦点的丢失通知,即如果音频焦点被系统或其他的应用程序抢占时,应该做出什么响应。

“音频焦点”这个翻译可能有点难以理解。其实audio focus的本意是说用户在同一时刻只能聚焦(focus on)在一个音频流的播放上,不可能同时听两个播放的音频流,由此演化出了audio focus的概念。

Android平台上的音频焦点分为以下四类
AudioManager#AUDIOFOCUS_GAIN 永久性的音频焦点。
AudioManager#AUDIOFOCUS_GAIN_TRANSIENT 暂时性的音频焦点。
AudioManager#AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK 请求附带“降低音量”的暂时性焦点,表示您只希望在短时间内播放音频,并允许前一个持有焦点的应用在降低其音量输出的情况下继续播放,也就是允许两个音频流同时出声。特别适合于语音导航、语音助手的场景使用。
AudioManager#AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE 请求暂时性的音频焦点,同时不希望系统播放任何其他音频,常用于录音或者需要做语音识别的场景。

因为每个焦点类型都是以整型定义的,所以可以通过抓日志adb logcat | egrep -i focus来从日志判断某个应用申请的是什么类型的音频焦点。比如我就发现google的语音助手申请的是AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK类型的焦点&

你可能感兴趣的:(音视频进阶之路,android,音视频,安卓,1024程序员节)