我想我仍然需要了解Android应用的流程。标题可能不太清楚,所以让我解释一下。
场合:
我有一个游戏,有一些不同的活动。例如,MenuActivity
,GameActivity
和HowToActivity
。游戏从MenuActivity
开始并播放设置为循环的歌曲。要在MenuActivity
和HowToActivity
期间播放相同的歌曲,单独播放,我会从已实施的Application.
播放歌曲如果我按下主页按钮,获取电话或其他任何内容将继续发挥。为了防止这种情况,我需要在离开应用程序时停止播放歌曲。
问题:
目前,在MenuActivity
中,我有代码停止protected void onStop()
功能下的歌曲。这会在离开应用程序时停止播放歌曲(按主屏幕按钮,拨打电话),但在更改应用内的其他活动时也会停止播放歌曲,例如HowToActivity
。所以问题是,我怎么能分辨出来呢?
答案 0 :(得分:1)
通常情况下,人们使用PhoneStateListener读取手机状态:
http://developer.android.com/reference/android/telephony/PhoneStateListener.html
这就是为什么这么多应用程序需要READ_PHONE_STATE权限,他们确保您在应用程序启动时不接听电话并继续做一些令人讨厌的事情。您可以创建一个侦听器来检查何时发生这种情况。你不应该真正改变主键的行为(并且不能!),但是你总是可以监听onPause()和onStop()之类的东西。
您可能想要一个实际播放音乐的后台服务等等,然后您希望在活动中获得生命周期事件时从实际应用中控制此服务。这使你的应用程序更加模块化(即,它在语义上做的事情是控制声音,下载流,无论如何),因为活动控制UI,服务在幕后发生的事情。
编辑:来自服务的MediaPlayer教程:
http://marakana.com/forums/android/examples/60.html
您可能还想查看使用唤醒锁,但可能并非绝对必要。
答案 1 :(得分:1)
杰西 您需要有一项能够完成播放歌曲的服务。 您可以从应用程序的任何活动轻松启动服务。此外,任何活动都可以停止服务。 因此,在onCreate()活动中,您可以启动歌曲播放器服务,即使活动消失并且新活动开始,也将播放该歌曲。一旦您的应用程序完成播放歌曲,只需调用stopService()。 我希望这能解决你的问题。
〜Rajan的
答案 2 :(得分:0)
创建接收器以捕获以下意图:
Intent.ACTION_CLOSE_SYSTEM_DIALOGS
当手机的主屏幕启动时,将调用此方法。所以你可以在那个时候停止音乐,而不是停止活动的onStop()。
但如果用户长时间按Home键启动应用程序,这将无济于事。
因此,尝试在不同的屏幕上播放不同的音乐。