我写了一个播客音频播放器并包含了音频聚焦原理。
这是我的方法,在媒体播放器的 onPrepared() 方法中调用:
private boolean requestAudioFocus(){
AudioManager am = (AudioManager) getSystemService(AUDIO_SERVICE);
OnAudioFocusChangeListener afChangeListener = new OnAudioFocusChangeListener() {
public void onAudioFocusChange(int focusChange) {
if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT){
pause();
} else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {
play();
} else if (focusChange == AudioManager.AUDIOFOCUS_LOSS) {
Log.d("MYAUDIOSERVICE","Audio Focus lost");
finish();
}
}
};
// Request audio focus for playback
int result = am.requestAudioFocus(afChangeListener,
// Use the music stream.
AudioManager.STREAM_MUSIC,
// Request permanent focus.
AudioManager.AUDIOFOCUS_GAIN);
if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
return true;
}
else{
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是:
启动应用程序并播放第一个播客时,一切正常。获得音频焦点并且播客继续播放。
当我停止播放并开始另一个播客时,音频焦点再次获得,但在 AudioManager.AUDIOFOCUS_LOSS 被 onAudioFocusChangeListener 接收后不久。
我想情况就是如此,因为我的应用程序具有焦点,再次请求它,获得它,但同时失去了“旧”焦点。
我是对的吗?如果这是正确的,我可以在结束旧播客的播放时放弃音频焦点吗?
提前谢谢