Android通过多项活动停止背景音乐服务

时间:2013-10-31 22:54:28

标签: android android-activity android-service

我有一个应用程序,它有一个播放音乐的服务。这是有效的,因为服务只是继续(因此播放)。

但是,当用户在任何活动中按下主页键时,我应该能够检测到我的应用程序是否空闲。我一直在环顾四周,我发现的每个问题都有一个问题:“使用onPause()或onStop()”但这只适用于一个活动,将代码复制到每个活动看起来像是一个肮脏的解决方案。

在我的主要内容中,我尝试过:

  1. onDestroy:按下主页键时不起作用。
  2. onPause:即使在开始另一个意图(不打算)时也会停止音乐。
  3. 我考虑过从main检测当前的活动,但这是一个太脏的解决方案。

    在我的主要活动中,我开始服务(backgroundMusicPlayer):

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
            setContentView(R.layout.activity_main);
        else
            setContentView(R.layout.activity_main_landscape);
        //_________BRON(MediaPlayer): http://stackoverflow.com/questions/3369068/android-play-sound-on-button-click-null-pointer-exception
        backgroundMusicPlayer = new Intent(MainActivity.this, BackgroundMusicPlayer.class);
        startService(backgroundMusicPlayer);
    
        mp = MediaPlayer.create(MainActivity.this, R.raw.buttonclick); //knopgeluiden laden
        super.onCreate(savedInstanceState);
    }
    

    我该怎么办?

1 个答案:

答案 0 :(得分:0)

您需要知道的是您的活动在后台(以及何时返回)。有几种方法可以做到这一点,但我找到的可靠方法基于this回答。

  

它的前提是在活动转换之间使用时间参考很可能提供足够的证据证明应用程序已经“背景化”。

这对我有用,在回调中你可以可靠地告诉你的服务做你想做的事。

此外,如果您的应用程序进入后台并且您正在玩游戏,那么您应该在服务中启动StartForeground(因此它获得优先权),并且当应用程序返回时,只需要stopForeground。

这样,即使用户与应用程序进行交互,您也始终避免使用前台服务。