Android如何知道我的应用程序何时处于活动状态?

时间:2014-05-12 17:24:58

标签: android android-activity apple-push-notifications android-notifications

我正在构建一个包含通知的应用。当某些内容来自服务器时,应用程序会发送通知。现在,我希望在当前应用处于活动状态时将通知声音静音。

所以我需要知道我的应用何时处于活动状态以及现在哪些活动处于活动状态。

我在stackoverflow上找到了这个答案:

Determining the current foreground application from a background task or service

但它不是我的捷径,因为它需要我 1.获取正在运行的应用列表, 2.找到现在活跃的应用程序 3.找到现在活动的活动 4.检查活动是否是我需要的。

但是,我怎样才能简单地检查我的应用程序的活动何时处于活动状态?

希望我能成功解释自己。

由于

1 个答案:

答案 0 :(得分:0)

  

我正在构建一个带有通知的应用。当某些内容来自服务器时,应用程序会发送通知。现在,我希望在当前应用处于活动状态时将通知声音静音。

恕我直言,这不是一个很棒的设计选择。如果您的UI位于前台,则根本不应该有Notification,而是更新您的UI以反映后台发生的任何事件。

  

所以我需要知道我的应用何时处于活动状态以及现在哪些活动处于活动状态。

在评论中,njzk2在活动或通知模式上指向an older blog post of mine。虽然模式仍然有效,但使用有序广播并不是一个很好的选择。您可以使用进程中的消息总线(LocalBroadcastManager,Square的Otto,greenrobot的EventBus)来提供更好的服务。

但无论通信渠道如何,基本方法都是相同的:引发事件以告知您的UI层(活动和片段)事件发生。活动和/或片段在它们位于前台时注册这些事件(例如,onResume()),并且当它们不在时(例如,onPause())注销那些事件。如果没有任何事情发生,请有一个"支持"检测此条件并执行回退操作的处理程序,例如引发Notification

我有三个示例应用程序使用以下方式演示:

如果您确定确实要强制用户必须处理您的Notification,即使您的用户界面在前台,并且您只想要一个配置不同的Notification,您也会需要通过onResume()onPause()再次跟踪自己哪些活动位于前台。