1)在一个android项目中,我写了一个在后台播放音乐的服务。问题是,当我的应用程序在后台播放音乐,而另一个应用程序(音乐播放器)播放音乐时,两个音频同时播放。如果其他应用程序播放音乐,我想停止播放我的应用程序中的音乐。我该如何处理这件事?
发布于 2014-07-13 03:22:39
这个概念在安卓中被称为audio focus。
从广义上讲,这意味着在某个时间点上只有一个应用程序可以拥有音频焦点,如果它要求这样做,您应该放弃(例如,如果有电话打来,或者另一个应用程序想要播放音乐等)。
为此,您需要注册一个OnAudioFocusChangeListener。
基本上,你必须:
请查看安卓文档中的Managing Audio Focus文章。
发布于 2014-07-15 19:48:25
这就是我解决问题的方法。
实施OnAudioFocusChangeListener listener
像这样初始化AudioManager
private AudioManager mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);请求音频焦点
mAudioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC,
AudioManager.AUDIOFOCUS_GAIN);@重写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;
}
}发布于 2014-10-21 12:40:25
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;
}这将请求音频焦点,当您启动您的应用程序和其他音乐应用程序已经运行.So,这将停止已经运行的应用程序并启动您的应用程序。
if (reqAudioFocus()) {
mPlayer.prepareAsync();
}将此粘贴到您要准备mediaplayer的位置。
换句话说,你的应用程序应该在其他应用程序被播放时停止
使用
public void onAudioFocusChange(int focusChange) {
if (focusChange == AudioManager.AUDIOFOCUS_LOSS) {
am.abandonAudioFocus(this);
mPlayer.stop();
}
}其中"am“是您的AudioManager实例。
别忘了实现AudioManager.OnAudioFocusChangeListener
https://stackoverflow.com/questions/24716455
复制相似问题