如何在切换活动时保持背景音乐播放?

5
我的应用程序有一些背景音乐在循环播放,使用 MediaPlayer。我在 Activity 的 onPause 中停止音乐,这样如果用户按 Home 键离开应用程序,或者接到电话等情况时,它就不会继续播放。
然而,现在当用户移动到某些其他活动时,我需要音乐继续无缝播放。也就是说,如果他们按按钮 A,那么我将活动 A 添加到堆栈中,并且音乐应该继续播放;但是如果他们按按钮 B,则我将活动 B 添加到堆栈中,音乐应该停止。同样,如果他们按手机的返回按钮从活动 A 返回到原始活动,则音乐应该继续播放。
我已经尝试在 Activity A 的 onResume 中重新启动 MediaPlayer,但在过渡期间音乐有相当明显的间隙。
目前,我让 onPause 触发半秒延迟,然后在另一个活动的 onResume 中取消延迟并在另外四分之一秒内淡出音乐。这意味着当用户离开应用程序时,音乐停止得足够快;然而,当用户切换活动时,在某些较慢的设备上仍然会出现音乐稍微暂停的情况。此外,这种方法感觉像一个非常糟糕的 hack。
有更好的方法吗?
[编辑:如果有帮助的话,MediaPlayer 存储在一个静态类中,我可以从应用程序的任何地方访问它。]
1个回答

3
我能想到的最简单的解决方案是在我的全局对象中设置一个静态标志变量(我们称之为)。每当我启动新的活动意图(或从不是入口点的活动按“返回”,覆盖方法)时,我都会将该值设置为,并且如果该标志被设置,则不会停止音乐。我会在每个活动的中将该值设置回。不过,我认为在淡出之前暂停1-2秒钟也不是一种不好的方式 - 这实际上与在iOS应用程序中按下“主页”按钮时背景音乐的工作方式非常相似。
编辑:您还可以尝试基于服务的解决方案,通过使您的活动侦听特定广播来“嗅探”活动是否正在运行; 有一些在线示例代码(点击此处),我没有尝试过,但这是一种有趣的方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接