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

Ume*_*ran 4 audio service android

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

mat*_*ash 7

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

从广义上讲,这意味着只有一个应用程序可以在一个时间点拥有音频焦点,并且如果它被要求你应该放弃(例如,如果电话到达,或者另一个应用程序想要播放音乐,&c).

要做到这一点,你需要注册一个OnAudioFocusChangeListener.

基本上,你必须:

  • 在开始播放之前请求音频焦点.
  • 只有在有效获取时才开始播放.
  • 停止播放时放弃焦点.
  • 通过暂时降低音量("躲避")或完全停止播放来处理音频焦点丢失.

请查看Android文档中的Managing Audio Focus文章.


Ume*_*ran 7

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

实行 OnAudioFocusChangeListener listener

初始化AudioManager就像

private AudioManager mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
Run Code Online (Sandbox Code Playgroud)

请求音频焦点

mAudioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC,
                AudioManager.AUDIOFOCUS_GAIN);
Run Code Online (Sandbox Code Playgroud)

@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;
  }
}
Run Code Online (Sandbox Code Playgroud)