编辑 - 找到了一个简单的5-10行代码解决方案!!!请看下面的我的答案!!!耶!!!!!!
我已经搜索了5个小时,在许多SO的帖子中都找不到答案,而这似乎是最简单明显的东西!!!
编辑 - 顺便说一句,这不是一个音乐播放器应用程序,只是一个查看图片和文本的应用程序,可以打开多个活动,如菜单、关于、查看不同类型的图片等。我只想在查看图片和文本时播放一些简单的背景音乐,为什么这么困难?
另一个编辑 - 看起来主要问题确实是: “为什么按Home按钮不调用onPause或onStop?我该如何停止媒体播放器?”- 这样我就知道什么时候停止媒体播放器了?市场上下载的游戏是怎么做到的?
主页活动开始
然后
媒体播放器开始:
player = MediaPlayer.create(this, R.raw.idil);
player.setLooping(true);
player.setVolume(100,100);
player.start();
在onCreate之外声明了Player
MediaPlayer player;
当打开其他活动时,背景音乐会继续播放,这很好,这正是我想要的。
现在,当我完成我的非常简单的应用程序(仅在不同的活动中显示一些图片和文本)后,我要么点击多次返回到主页/原始活动,然后再点击一次“退出”,或者我只需按主页键“退出”,因为我已经完成了这个应用程序,不需要听那首音乐了。
选项1
在onPause
重写中调用player.stop();
,这不是我想要的,因为当我离开主页活动进入其他活动(如“菜单”和“关于”)时,背景音乐会停止。当我打开新的活动时,我也不想使用暂停和恢复,因为我不希望美丽的背景音乐“跳跃”或被打断。
选项2
@Override
protected void onPause() {
super.onPause();
if (this.isFinishing()){
player.stop();
}
}
这种方式更好,因为背景音乐在活动之间不会停止,当我从主页活动中按“后退”时,音乐会停止,我可以继续在安静的环境下享受我的 Android 手机的乐趣,但是问题是,当按下 HOME 按钮以“退出”应用程序时,讨厌的背景音乐仍在播放。
奇怪地
@Override
protected void onStop() {
super.onStop();
if (this.isFinishing()){
player.stop();
}
}
和onPause一样(我确实了解实际的差异)
编辑- player.stop()在super.onStop()上面或下面似乎都没有影响,但它影响了我看不到的某些东西,无论如何,仍然没有解决方案:(
ooooo
ooooo
编辑- 另一个选项- 但不起作用
public void onUserLeaveHint() {
player.stop();
super.onUserLeaveHint();
}
按 HOME 键时停止了音乐,但开始新活动时也停止了音乐 :(
编辑 - 我看到了一个非常常见的解决方法,在多个地方都看到过,但似乎太荒谬了:
基本上,要记录已打开和关闭的活动数量(onResume 和 onPause 可能是最好的选择,但这一点不重要),当该计数达到 0 时,停止后台音乐。 是的,这很简单,但为什么我必须以编程方式做到这一点,实际上,这篇文章最大的问题是:
为什么按 HOME 按钮不调用 onPause 或 onStop ???
将其放在 onDestroy 中不是选项,因为只有在系统内存不足或强制关闭应用程序时才会调用 onDestroy,并且这已经有文档说明。
覆盖 HOME 按钮也不是选项,因为我已经读到它是“不可能的”,并且我已经读到它是“极为反感的”,无论哪种情况,我都要避免那样做。
我不认为需要创建 SERVICE,即使我这样做了,什么时候我会停止服务? 看起来我会遇到同样的问题。
现在,让我感到非常困惑的是,每个从 Android 市场下载的游戏和应用程序都有非常美丽的背景音乐,当我按 BACK 或 HOME 因为我已经完成了游戏时,音乐会停止,而不是在后台继续播放。
我非常沮丧,因为我觉得自己错过了一些非常简单的东西,因为这是任何应用程序最基本的生命周期问题之一。
我花了一个月时间阅读 developer.android.com 的每一页,包括 Dev Guide、教程、示例项目,并研究了参考部分,以及在 Google 上搜索了该主题 5 个小时。
我也不明白为什么有 6 或 7 个 SO 线程存在着完全相同的问题,却没有被回答,市场上可以下载的每个应用程序都在你按 HOME 或 BACK 或其他"退出"应用程序并去做手机上的其他事情时停止播放音乐(除非它是一个后台音乐播放器)。
我错过了什么?
android.permission.GET_TASKS
已经废弃。 - Rohit Sharma