在应用媒体播放器开始播放时暂停所有其他媒体播放器和音频

时间:2018-01-04 06:35:57

标签: android android-mediaplayer

我正在开发一个即按即说应用程序,如果接收者连接到互联网,接收者将从发件人那里获得实时流式音频消息。现在一切正常,除了一个问题是:每当谷歌音乐或youtube等任何其他应用程序正在播放音频时,如果我通过应用程序收到音频通知或消息,则两个音频都以并行方式播放。我正在为应用程序使用VoiceLayer库并播放消息音频,他们使用VoiceLayerMessagePlayer。当我在我的应用程序中收到通知或语音消息时,有什么办法可以暂停其他媒体播放器吗?我查看了互联网,发现OnAudioFocusChangeListener可能会有所帮助,但没有得到关于其实现的正确示例。如果您需要更多信息,请告诉我。提前谢谢。

3 个答案:

答案 0 :(得分:0)

您应该使用AudioManager服务接收有关是否收到/丢失音频焦点的通知(管理音频焦点)。我在一个项目中做了类似的事情,当我的应用程序开始播放时,Google Play暂停,反之亦然。使用以下代码控制媒体播放,例如(活动或服务)

Stop MediaPlayer when an other app play music

答案 1 :(得分:0)

请检查以下代码是否正常。

AudioManager am = null;

// Request focus for music stream and pass 
AudioManager.OnAudioFocusChangeListener
// implementation reference
int result = am.requestAudioFocus(this, AudioManager.STREAM_MUSIC, 
                AudioManager.AUDIOFOCUS_GAIN);

if(result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED)
{
    // Play
}

// Implements AudioManager.OnAudioFocusChangeListener

@Override
public void onAudioFocusChange(int focusChange) 
{
    if(focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT)
    {
        // Pause
    }
    else if(focusChange == AudioManager.AUDIOFOCUS_GAIN)
    {
        // Resume
    }
    else if(focusChange == AudioManager.AUDIOFOCUS_LOSS)
    {
        // Stop or pause depending on your need
    }
}

希望这可以帮助您并解决您的问题。

答案 2 :(得分:0)

请试试这个代码。它和我一起工作

  val audioManager = requireActivity().getSystemService(Context.AUDIO_SERVICE) as AudioManager
  val focusRequest = AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN).run {
        setAudioAttributes(AudioAttributes.Builder().run {
            setUsage(AudioAttributes.USAGE_GAME)
            setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
            setOnAudioFocusChangeListener({  }, object : Handler() {})
            build()
        })
        setAcceptsDelayedFocusGain(true)
        build()
    }
    audioManager.requestAudioFocus(focusRequest)