繁体   English   中英

Android停止进行多项活动的背景音乐服务

[英]Android stopping background music service on with multiple activities

我有一个可以播放音乐的应用程序。 之所以起作用,是因为该服务一直在继续运行(因此一直在播放)。

但是,当用户在任何活动中按下Home键时,我都应该能够检测到我的应用程序是否空闲。 我一直在环顾四周,发现的每个问题都有一个类似的答案:“使用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);
}

我该怎么办?

您需要知道的是您的活动何时在后台(以及何时返回)。 有几种方法可以执行此操作,但是我发现的可靠方法是基于答案的。

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

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

另外,如果您的应用程序进入后台并且正在播放,则应该在服务中启动startForeground(这样它才具有优先级),并且当应用程序返回时,只需stopForeground。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM