由于可能会有多个应用可以播放音频,所以我们应当考虑一下他们应该如何交互。为了防止多个音乐播放应用同时播放音频,Android使用音频焦点(Audio Focus)来控制音频的播放——即只有获取到音频焦点的应用才能够播放音频。
在我们的应用开始播放音频之前,它需要先请求音频焦点,然后再获取到音频焦点。另外,它还需要知道如何监听失去音频焦点的事件并对此做出合适的响应。
请求获取音频焦点(Request the Audio Focus)
在我们的应用开始播放音频之前,它需要获取将要使用的音频流的音频焦点。通过使用requestAudioFocus() 方法可以获取我们希望得到的音频流焦点。如果请求成功,该方法会返回AUDIOFOCUS_REQUEST_GRANTED。
另外我们必须指定正在使用的音频流,而且需要确定所请求的音频焦点是短暂的(Transient)还是永久的(Permanent)。短暂的焦点锁定:当计划播放一个短暂的音频时使用(比如播放导航指示)。
永久的焦点锁定:当计划播放一个较长但时长可预期的音频时使用(比如播放音乐)。
下面的代码片段是一个在播放音乐时请求永久音频焦点的例子,我们必须在开始播放之前立即请求音频焦点,比如在用户点击播放或者游戏中下一关的背景音乐开始前。AudioManager am = mContext.getSystemService(Context.AUDIO_SERVICE);
...
// Request audio focus for playback
int result = am.requestAudioFocus(afChangeListener,
// Use the music stream.
AudioManager.STREAM_MUSIC,
// Req