android - 如果应用程序在前台,则替代操作的设计模式?

标签 android intentservice

我正在构建一个使用 Google Cloud Messaging 接收推送通知的操作。

这涉及几个值得注意的组件,即:

  • WakefulBroadcastReceiver 用于接收来自 GCM 的消息。
  • 一个 IntentService 在收到 GCM 事件时被通知。

正如我确信许多应用程序的情况一样,我想采用不同的方法来判断应用程序在前台有 Activity 时与应用程序没有时在前台的应用程序。

如果应用程序未激活,我想将通知发布到通知抽屉,如果应用程序处于 Activity 状态,则只需将事件转发到前台 Activity 。

这有设计模式吗?我应该如何确定应用程序是在前台还是在后台?

最佳答案

您可以按照 this blog post 中概述的方法进行操作您在 Activity 中创建一个 BroadcastReceiver 并具有正优先级(即高于默认的 0),它会拦截特定操作,然后调用 abortBroadcast - 这会处理应用打开的情况。然后,您还在您的 list 中注册一个 BroadcastReceiver,它处理相同的操作但具有默认优先级 - 如果应用程序未打开并创建系统通知,这是回退。

然后您使用 sendOrderedBroadcast() 将您的广播按优先顺序发送给所有已注册的接收者。如果 Activity 是开放的,第一个将处理它。否则,它将默认为另一个并创建一个通知。

关于android - 如果应用程序在前台,则替代操作的设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22001844/

相关文章:

javascript - Ionic/Cordova - 获取要在 <img src =""> 上使用的图像路径

android - LocationServices.SettingsApi 已弃用

android - 如何使 IntentService 的线程保持 Activity 状态?

java - 在 Android 的 IntentService 中等待异步回调

android - 按下后退按钮后未调用 onPrepareOptionsMenu(Menu)

android - 如何修复 java.lang.NoClassDefFoundError : org. jsoup.Jsoup 错误?

java - 修复无法解决所有依赖关系

java - Android 工作管理器与服务?

java - Android 前台服务通知未显示在状态栏中

Android:在 Activity 上下文之外使用 WebView