【发布时间】:2013-10-31 22:54:27
【问题描述】:
我有一个具有播放音乐服务的应用程序。这是有效的,因为服务只是继续运行(并因此运行)。
但是,当用户在任何活动中按下主页键时,我应该能够检测到我的应用程序是否处于空闲状态。我一直在环顾四周,发现的每个问题都有一个类似的答案:“使用 onPause() 或 onStop()”,但这仅适用于一个活动,将代码复制到每个活动似乎是一个肮脏的解决方案。
我主要尝试过:
- onDestroy:按下 Home 键时不起作用。
- 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