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应用程序中按下“主页”按钮时的工作方式非常相似
编辑:您还可以尝试一种基于服务的解决方案,通过让您的活动收听特定广播来“嗅探”您的活动是否正在运行;有一些我没有尝试过,但这是一个有趣的方法)