4

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

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

4

3 回答 3

4

我认为在活动之间共享 MediaPleer 的最佳方式是 android Service。创建一个服务来保存 MediaPlayer。您的活动在 onResume 中绑定到服务并在 onPause 中取消绑定。服务总是知道是否有人绑定到它。因此,如果没有人绑定(没有您正在运行的活动),它将停止播放。谷歌“来自服务的android MediaPlayer”

于 2012-12-30T08:16:24.963 回答
3

您将需要使用意图过滤器实现一个服务和一个 广播接收器,以侦听所需的操作和/或按键(主页按钮等)。Android 媒体播放器源可以从这里下载。您要查看的两个类是MediaButtonIntentReceiverMediaPlaybackService

于 2012-12-30T09:36:06.840 回答
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();   
   }
于 2014-06-04T23:52:51.620 回答