首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android :如果另一个应用播放音乐,如何停止我的应用的音乐服务??

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

Stack Overflow用户
提问于 2014-07-13 03:17:23
回答 3查看 5.7K关注 0票数 4

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

EN

回答 3

Stack Overflow用户

发布于 2014-07-13 03:22:39

这个概念在安卓中被称为audio focus

从广义上讲,这意味着在某个时间点上只有一个应用程序可以拥有音频焦点,如果它要求这样做,您应该放弃(例如,如果有电话打来,或者另一个应用程序想要播放音乐等)。

为此,您需要注册一个OnAudioFocusChangeListener

基本上,你必须:

  • 在开始播放前请求音频焦点。
  • 仅在您有效获取焦点时才开始播放。
  • 在您停止playback.
  • Handle音频焦点丢失时放弃焦点,方法是暂时降低音量(“减速”)或完全停止播放。

请查看安卓文档中的Managing Audio Focus文章。

票数 7
EN

Stack Overflow用户

发布于 2014-07-15 19:48:25

这就是我解决问题的方法。

实施OnAudioFocusChangeListener listener

像这样初始化AudioManager

代码语言:javascript
复制
private AudioManager mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);

请求音频焦点

代码语言:javascript
复制
mAudioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC,
                AudioManager.AUDIOFOCUS_GAIN);

@重写OnAudioFocusChangeListener的以下方法

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2014-10-21 12:40:25

代码语言:javascript
复制
 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,这将停止已经运行的应用程序并启动您的应用程序。

代码语言:javascript
复制
 if (reqAudioFocus()) {

            mPlayer.prepareAsync();
        }

将此粘贴到您要准备mediaplayer的位置。

换句话说,你的应用程序应该在其他应用程序被播放时停止

使用

代码语言:javascript
复制
public void onAudioFocusChange(int focusChange) {

        if (focusChange == AudioManager.AUDIOFOCUS_LOSS) {
            am.abandonAudioFocus(this);
            mPlayer.stop();


        }

    }

其中"am“是您的AudioManager实例。

别忘了实现AudioManager.OnAudioFocusChangeListener

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24716455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档