在活动之间播放MediaPlayer音频,但是当背景失去焦点并被带回时暂停/恢复?

时间:2012-12-30 07:55:35

标签: android android-mediaplayer

我花了将近一整天的时间来寻找特定MediaPlayer问题的解决方案。当用户在我的应用程序中切换活动时,我希望我的MediaPlayer的音频继续播放,但是当切换到另一个应用程序(主页按钮,最近的应用程序按钮等)时停止播放,并在应用程序再次聚焦时恢复。我似乎无法获得以这种方式工作的解决方案。这不是我不知道从哪里开始,但我尝试过的每一个解决方案都很复杂,最终只是没有用。看起来我只需要应用程序就可以判断活动何时停止切换活动,以及应用程序失去焦点。

我无法想象这样的情况如此罕见,以至于没有一个简洁,优雅的解决方案来解决它。谁有人可以帮我搞清楚吗?谢谢!

3 个答案:

答案 0 :(得分:4)

我认为在活动之间分享MediaPleer的最佳方式是android服务。 创建服务以保存MediaPlayer。您的活动绑定到onResume中的服务并取消绑定onPause。服务总是知道是否有人绑定它。因此,如果没有人绑定(没有你的跑步活动),它就会停止播放。 google“来自服务的android MediaPlayer”

答案 1 :(得分:3)

您需要使用intent-filter实现一个Service和一个BroadcastReceiver来监听所​​需的操作和/或按键(主页按钮等)。 Android媒体播放器来源可以从here下载。您要查看的两个课程是MediaButtonIntentReceiverMediaPlaybackService

答案 2 :(得分:0)

服务可能是最佳选择。是否提供服务虽然通常可以表明您设计的程序并不像应有的那样健壮。即使您确实创建了服务,您仍然需要知道何时暂停以及何时恢复。

我实现了一个简单的解决方案,似乎对我有用而没有正确地重构整个应用程序以获得更好的应用程序引擎:

在您希望音乐开始的初始活动中启动mediaPlayer后:

在初始活动和每个后续活动中,创建一个成员变量: private boolean mStopTheMusic = true;

然后在每个活动中,您希望音乐继续播放和/或停止适当地覆盖以下内容:(注意:正确停止将是任何其他应用程序到达前景而不是您的。这些是停止音乐的适当时间) 并且,只要您以编程方式在当前开始新活动,设置mStopTheMusic = false,这样您的背景音乐就不会停止。

    @Override 
    public void onResume()
    {
        super.onResume();

        mStopTheMusic  = true;
        if (!MusicPlayer.IsMusicPlaying())
            MusicPlayer.StartMusic();  
    }

    @Override
    public void onPause() 
    {      
        super.onPause();
        if (mStopTheMusic)
          MusicPlayer.PauseMusic(); 
    }

   @Override 
   public void onBackPressed()
   {        
       mStopTheMusic = false;
       super.onBackPressed();   
   }