android - 如何在更改 Activity 时保持背景音乐播放?

标签 android media-player

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

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

我已经尝试在 Activity A 的 onResume 中再次启动 MediaPlayer,但是在转换期间音乐中有相当明显的间隙。

目前,我已经让 onPause 触发了半秒的延迟,然后音乐在四分之一秒内逐渐消失;这可以从另一个 Activity 的 onResume 中取消。这意味着当用户离开应用程序时,音乐会很快停止;然而,当用户切换 Activity 时,在一些较慢的设备上,我的音乐仍然会出现轻微的停顿。此外,它感觉就像一个非常肮脏的黑客。

有没有更好的办法?

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

最佳答案

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

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

关于android - 如何在更改 Activity 时保持背景音乐播放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5195830/

相关文章:

android - 如何在 Android 中的同一个选项卡下打开多个 View ?

android - 如何使用 Media Player android 随机播放列表歌曲

java - 为什么我的媒体播放器不幸停止?

android - Android MediaPlayer 类可以播放哪些文件类型?

java - Android 媒体播放器在后台播放

java - 从 fragment 启动 fragment 会显示默认屏幕

android - Cordova 5.4.0 404 未找到(来自缓存)白名单 CORS http POST 请求

java - 单击通知中的按钮时启动 Activity

java - 具有多项选择的 Android Spinner

java - 屏幕关闭时继续播放音乐