【问题标题】:Android stopping background music service on with multiple activitiesAndroid通过多个活动停止背景音乐服务
【发布时间】:2013-10-31 22:54:27
【问题描述】:

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

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

我主要尝试过:

  1. onDestroy:按下 Home 键时不起作用。
  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);
}

我该怎么办?

【问题讨论】:

  • 你在 onPause 上做什么?您可能应该在完成时调用 MediaPlayer 的公共函数,例如开始、暂停、释放。汤米K
  • 这就是问题所在,您可能建议在我的 onPause 方法中调用 stopService(intent),但即使在我的应用程序中打开另一个活动时,这也会停止服务。那不是我的本意。 stopService(Intent) 方法仅应在应用停止或最小化时调用(例如,通过按 home 键,但新旧 API 的任何事件都无法捕获该方法)。
  • 我认为您应该接受这样一个事实,即没有 HOME 键的侦听器,即没有 HOME 检测。查看其他应用程序,例如 Pandora。您必须按暂停按钮才能暂停音乐。否则,如果您仍然坚持检测 HOME,您可以让您的服务定期检查您的应用是否在前台,作为一种解决方法。
  • 嗨,我已经接受了这样一个事实,即不可能听 home 键。我从没想过 Android 应用程序必须一直与变通方法放在一起......

标签: android android-activity android-service


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 很高兴你得到它。如果您使用 API 14+,请检查我是否为后台问题添加了新解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-12
  • 1970-01-01
  • 1970-01-01
  • 2016-12-06
  • 1970-01-01
相关资源
最近更新 更多