转自:http://blog.sina.com.cn/s/blog_67d9
什么叫音频焦点 (audio focus)?
音频焦点工作的示例:
第一步
首先你要获得一个音频管理服务AudioManager
这个通常在service的oncreate中完成。
第二步
然后在合适的地方,比如播放音乐的按钮中放置获得音频焦点的代码
requestAudioFocus方法可以获得音频焦点,其有三个参数,解释如下:
第一个参数 OnAudioFocusChangeListen
第二个参数streamType:焦点获得之后的数据传输类型,这里是AudioManager.STREAM_MUSIC
第三个参数durationHint
第三步
实现音频焦点监听器OnAudioFocusChangeListen
具体示例如下:
privateOnAudioFocusChangeListener mAudioFocusListener = newOnAudioFocusChangeListener(){
public void onAudioFocusChange(int focusChange) {
switch(focusChange){
case AudioManager.AUDIOFOCUS_LOSS:
if(isPlaying()){
//we do not need get focus back in this situation
//会长时间失去,所以告知下面的判断,获得焦点后不要自动播放
mPausedByTransientLossOfFocus = false;
pause();//因为会长时间失去,所以直接暂停
}
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
if(isPlaying()){
//短暂失去焦点,先暂停。同时将标志位置成重新获得焦点后就开始播放
mPausedByTransientLossOfFocus = true;
pause();
}
break;
case AudioManager.AUDIOFOCUS_GAIN:
//重新获得焦点,且符合播放条件,开始播放
if(!isPlaying()&&mPausedByTransientLossOfFocus){
mPausedByTransientLossOfFocus = false;
resume();
}
break;
}
}};
最后
在适当的时候注销掉这个监听器比如在onDestroy()中
到此整个音频焦点的控制就完成了