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

时间:2011-03-04 15:35:37

标签: android media-player

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

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

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

此刻我onPause触发了半秒延迟,然后音乐逐渐消失了五分之一秒;这可以从另一个活动onResume中取消。这意味着当用户离开应用程序时,音乐会足够快地停止;然而,当用户切换活动时,我仍会在一些较慢的设备上稍微暂停音乐。此外,感觉就像一个非常脏的黑客。

有更好的方法吗?

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

1 个答案:

答案 0 :(得分:3)

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

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

相关问题