2

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

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

我主要尝试过:

  1. onDestroy:按下主页键时不起作用。
  2. onPause:即使在开始另一个意图(非预期)时也会停止音乐。

我考虑过从 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);
}

我该怎么办?

4

1 回答 1

0

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

它的工作前提是,在活动转换之间使用时间参考很可能会提供足够的证据证明应用程序是否已“后台”。

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

此外,如果您的应用程序进入后台并且您正在播放,那么您应该在您的服务中启动Foreground(因此它获得优先级)并且当应用程序返回时,只需停止Foreground。

这样一来,您就可以避免一直使用前台服务,即使用户正在与应用程序交互。

于 2013-11-01T00:30:45.140 回答