Android 如何在更改活动时播放背景音乐?

Android 如何在更改活动时播放背景音乐?,android,media-player,Android,Media Player,我的应用程序使用MediaPlayer循环播放一些背景音乐。我在活动的onPause中停止音乐,这样,如果用户按Home键离开应用程序,或者如果他们接到电话等,音乐就不会继续播放 但是,我现在需要音乐在用户移动到某些其他活动时继续无缝播放。也就是说,如果他们按下按钮A,那么我将活动A添加到堆栈中,音乐应该继续;但是,如果他们按下按钮B,我将活动B添加到堆栈中,音乐应该停止。同样,如果他们按手机的后退按钮从活动A返回到原始活动,音乐也会继续播放 我尝试在活动A的onResume中再次启动Media

我的应用程序使用
MediaPlayer
循环播放一些背景音乐。我在活动的
onPause
中停止音乐,这样,如果用户按Home键离开应用程序,或者如果他们接到电话等,音乐就不会继续播放

但是,我现在需要音乐在用户移动到某些其他活动时继续无缝播放。也就是说,如果他们按下按钮A,那么我将活动A添加到堆栈中,音乐应该继续;但是,如果他们按下按钮B,我将活动B添加到堆栈中,音乐应该停止。同样,如果他们按手机的后退按钮从活动A返回到原始活动,音乐也会继续播放

我尝试在活动A的
onResume
中再次启动
MediaPlayer
,但在过渡期间音乐中存在相当明显的差距

目前,我的
onPause
触发了半秒的延迟,然后音乐又在四分之一秒内消失;这可以从另一个活动的
onResume
中取消。这意味着当用户离开应用程序时,音乐停止的速度足够快;但是,当用户切换活动时,在一些速度较慢的设备上,音乐仍然会有轻微的停顿。此外,它感觉像一个真正肮脏的黑客

有更好的办法吗


[编辑:如果有帮助,
MediaPlayer
保存在一个静态类中,我可以从应用程序中的任何位置访问它。

如果我需要完成这项工作,我可以立即想到的最简单的解决方案是在我的全局
应用程序
对象中设置一个静态标志变量(我们称之为
ssStartingNewActivity
). 无论我在哪里开始一个新的活动(或从不是入口点的活动中按下“后退”,覆盖
onBackPressed
方法),我都会将该值设置为
true
,如果设置了该标志,则让
onPause
不停止音乐。我会在每个活动的
onCreate
中将值设置回
false
。不过,我不认为在淡出前暂停1-2秒是一种不好的方式——这实际上与用户在有背景音乐的iOS应用程序中按下“主页”按钮时的工作方式非常相似

编辑:您还可以尝试一种基于服务的解决方案,通过让您的活动收听特定广播来“嗅探”您的活动是否正在运行;有一些我没有尝试过,但这是一个有趣的方法)