Android:如何停止我的应用程序的音乐服务,如果另一个应用程序正在播放音乐?

5

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

3个回答

8

这是我解决问题的方法。

实现OnAudioFocusChangeListener监听器

初始化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;
  }
}

7

在Android中,这个概念被称为音频焦点

广义上来说,它意味着一次只有一个应用程序可以获得音频焦点,如果被要求,你应该放弃它(例如接听电话或其他应用程序想播放音乐等)。

为了实现这一点,您需要注册一个OnAudioFocusChangeListener

基本上,您必须:

  • 在开始播放之前请求音频焦点。
  • 只有在成功获取焦点后才能开始播放。
  • 停止播放时要释放焦点。
  • 通过降低音量临时进行“减弱”,或完全停止播放来处理音频焦点的丢失。

请参阅 Android 文档中的 管理音频焦点文章。


谢谢Mat。这真的帮了我很多。 - Umesh Isran

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。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接