Android 安卓:如果其他应用播放音乐,如何停止我应用的音乐服务。?
1) 在一个android项目中,我编写了一个在后台播放音乐的服务。问题是,当我的应用程序在后台播放音乐,而另一个应用程序(音乐播放器)播放音乐时,两个音频同时播放。如果有其他应用程序播放音乐,我想停止播放应用程序中的音乐。我该如何处理这件事 这个概念在Android中被称为音频焦点 从广义上讲,这意味着只有一个应用程序可以在一个时间点拥有音频焦点,如果它要求你放弃,你应该放弃(例如,如果有电话打来,或者另一个应用程序想要播放音乐,&c) 为此,您需要注册一个 基本上,你必须:Android 安卓:如果其他应用播放音乐,如何停止我应用的音乐服务。?,android,audio,service,Android,Audio,Service,1) 在一个android项目中,我编写了一个在后台播放音乐的服务。问题是,当我的应用程序在后台播放音乐,而另一个应用程序(音乐播放器)播放音乐时,两个音频同时播放。如果有其他应用程序播放音乐,我想停止播放应用程序中的音乐。我该如何处理这件事 这个概念在Android中被称为音频焦点 从广义上讲,这意味着只有一个应用程序可以在一个时间点拥有音频焦点,如果它要求你放弃,你应该放弃(例如,如果有电话打来,或者另一个应用程序想要播放音乐,&c) 为此,您需要注册一个 基本上,你必须: 开始播放前请求
- 开始播放前请求音频焦点
- 仅当您有效地获得播放时才开始播放
- 停止播放时放弃对焦
- 通过暂时降低音量(“闪避”)或完全停止播放来处理音频焦点丢失
请查看Android文档中的文章。这就是我解决问题的方法。 在AudioFocusChangeListener侦听器上实现
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;
}
}
初始化AudioManagerlike
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;
}
}
这将在您启动应用程序且其他音乐应用程序已在运行时请求音频焦点。因此,这将停止已在运行的应用程序并启动您的应用程序
if (reqAudioFocus()) {
mPlayer.prepareAsync();
}
将此粘贴到要准备mediaplayer的位置
另一方面,当播放其他应用程序时,您的应用程序应该停止
使用
其中“am”是AudioManager实例
别忘了实现AudioManager.OnAudioFocusChangeListener谢谢。这真的帮助了我。
public void onAudioFocusChange(int focusChange) {
if (focusChange == AudioManager.AUDIOFOCUS_LOSS) {
am.abandonAudioFocus(this);
mPlayer.stop();
}
}