Android:如果其他应用播放音乐,如何停止我的应用的音乐服务。

时间:2014-07-12 19:17:23

标签: android audio service

1)在一个Android项目中,我编写了一个在后台播放音乐的服务。问题是当我的应用程序在后台播放音乐而另一个应用程序(音乐播放器)播放音乐时,两个音频同时播放。我想停止在我的应用程序中播放音乐,如果有任何其他应用程序播放音乐。我该如何处理这个问题?

3 个答案:

答案 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