Soundcloud等应用程序如何阻止其他应用程序的MediaPlayer
?例如,当我通过Google音乐播放歌曲并打开SoundCloud时,一旦Soundcloud歌曲开始播放,Google Music的歌曲就会停止播放。我可能会遗漏一些显而易见的东西,但我一直想知道这是如何实现的。
谢谢, 贾斯汀
答案 0 :(得分:5)
使用音频焦点。见Request the Audio Focus
AudioManager am = mContext.getSystemService(Context.AUDIO_SERVICE);
...
// 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) {
am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);
// Start playback.
}
答案 1 :(得分:1)
加入@ TCA的回答:
只有一个AudioManager。因此,音频焦点分配给每个请求逐个的应用程序。 这意味着如果另一个应用程序请求音频焦点,您的应用程序将丢失它。通过您在请求音频焦点时注册的音频焦点更改侦听器的onAudioFocusChange处理程序(在TCA的答案中 afChangeListener ),您将收到有关音频焦点丢失的通知。
private OnAudioFocusChangeListener focusChangeListener =
new OnAudioFocusChangeListener() {
public void onAudioFocusChange(int focusChange) {
AudioManager am =(AudioManager)getSystemService(Context.AUDIO_SERVICE);
switch (focusChange) {
case (AudioManager.AUDIOFOCUS_LOSS_TRANSIENT) :
//Transient audio loss
break;
case (AudioManager.AUDIOFOCUS_LOSS) :
//Audio focus loss. Stop playback.
break;
case (AudioManager.AUDIOFOCUS_GAIN) :
//Audio focus gain. Start playback.
break;
default: break;
}
}
};