我已经实现了一个由 AlarmManager 触发的 BroadcastReceiver。AlarmManager 在 BOOT_COMPLETED 上初始化。所以我必须在清单中声明接收者。
我的问题是我希望 BroadcastReceiver 只在我自己的活动都没有在前台时(也就是用户没有与我的应用程序交互)时做某事。我从远程服务器中提取信息,并且无论如何都不想通知用户他当前是否在我的应用程序中。
到目前为止,我还没有设法确定我的应用程序是否在前台。有没有办法做这样的事情?ActivityManager 告诉我我的应用程序是否正在运行,但不告诉我它是否在前台。
这个问题和这里描述的差不多:Inform Activity from a BroadcastReceiver ONLY if it is in the frontground
解决方案:
在评估了几个解决方案之后,我想快速概述一下我认为处理后台/前台活动的最佳方法。
首选方法是在活动的 onResume 方法中注册广播接收器,并在 onPause 上的活动中取消注册。任何服务或其他背景元素都需要发送带有特定操作的广播意图,您的活动将拦截该操作。
如果您的活动在前台,它将注册其意图接收器,并且能够直接处理从您的服务发送的意图。如果它不在前台,它将不会收到意图,但调用广播的服务将知道没有人拦截其广播意图,并且能够自行处理。例如,它可以启动所需的活动、显示通知等。