1)在一个Android项目中,我编写了一个在后台播放音乐的服务。问题是当我的应用程序在后台播放音乐而另一个应用程序(音乐播放器)播放音乐时,两个音频同时播放。我想停止在我的应用程序中播放音乐,如果有任何其他应用程序播放音乐。我该如何处理这个问题?
答案 0 :(得分:7)
此概念在Android中称为音频焦点。
从广义上讲,这意味着只有一个应用程序可以在一个时间点拥有音频焦点,并且如果它被要求你应该放弃(例如,如果电话到达,或者另一个应用程序想要播放音乐,和放大器) ; c)中
为此,您需要注册OnAudioFocusChangeListener
。
基本上,你必须:
请查看Android文档中的Managing Audio Focus文章。
答案 1 :(得分:7)
这就是我解决问题的方法。
实施OnAudioFocusChangeListener listener
初始化AudioManager
,如
private AudioManager mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
请求音频焦点
mAudioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC,
AudioManager.AUDIOFOCUS_GAIN);
@Overide OnAudioFocusChangeListener
public void onAudioFocusChange(int focusChange)
{
switch (focusChange)
{
case AudioManager.AUDIOFOCUS_GAIN:
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
resumePlayer(); // Resume your media player here
break;
case AudioManager.AUDIOFOCUS_LOSS:
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
pausePlayer();// Pause your media player here
break;
}
}
答案 2 :(得分:0)
private boolean reqAudioFocus() {
boolean gotFocus = false;
int audioFocus = am.requestAudioFocus(this, AudioManager.STREAM_MUSIC,
AudioManager.AUDIOFOCUS_GAIN);
if (audioFocus == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
gotFocus = true;
} else {
gotFocus = false;
}
return gotFocus;
}
当您启动应用程序并且其他音乐应用程序已经运行时,这将请求音频焦点。因此,这将停止已经运行的应用程序并启动您的应用程序。
if (reqAudioFocus()) {
mPlayer.prepareAsync();
}
将其粘贴到您要准备媒体播放器的位置。
反过来说,你的应用应该在播放其他应用时停止
使用
public void onAudioFocusChange(int focusChange) {
if (focusChange == AudioManager.AUDIOFOCUS_LOSS) {
am.abandonAudioFocus(this);
mPlayer.stop();
}
}
其中“am”是您的AudioManager实例。
别忘了实施AudioManager.OnAudioFocusChangeListener