在活动之间播放Mediaplayer音频,但是当背景失去专注并将其带回时,请暂停/简历



我已经花了几乎整天的时间试图为特定的媒体问题找到解决方案。我希望我的MediaPlayer的音频在用户在我的应用程序中切换活动时继续播放,但是在切换到另一个应用程序(主页按钮,最新应用按钮等)时停止,并在再次将应用程序重点放在焦点中时恢复。不过,我似乎无法获得这样做的解决方案。这并不是说我不知道从哪里开始,但是我尝试过的每种解决方案都很复杂,最终根本没有起作用。似乎我只需要该应用程序能够分辨活动何时停止转换活动,而从应用程序失去焦点。

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

我认为在活动之间共享媒体的最佳方法是Android服务。创建一项服务以持有Mediaplayer。您的活动与Onresume中的服务结合,并在Onpause中解开。服务总是知道有人是否伴随着它。因此,如果没有人(没有您的跑步活动)就会停止播放。Google"服务中的Android Mediaplayer"

您将需要使用Intent-filter来聆听所需操作和/或钥匙按钮(主页按钮等)的服务和广播仪。可以从此处下载Android Media Player来源。您要看的两个类是MediaButtonIntEntReceiver和MediaPlayBackservice。

服务可能是要走的方式。无论是否使用服务,尽管它通常可以表明您设计的程序并不像应有的那样健壮。即使您确实创建了服务,您仍然需要知道何时暂停以及何时恢复。

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

在希望音乐开始的初始活动中启动媒体播放器之后:

在初始和每个后续活动中,创建一个成员变量:私人布尔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();   
   }

最新更新