iOS如何判断应用程序是运行前台还是后台?

众所周知,如果一个iOS应用程序正在运行前台,那么当删除通知到来时,该应用程序将不会通知用户。 现在在我的应用程序中,我想显示警报通知用户远程通知。 如何判断应用程序是否正在运行前景或背景? 我find了文档和searchstackoverflow.com并没有find任何有关的事情。 谢谢。

[UIApplication sharedApplication].applicationState将返回当前状态,检查可能的值,并且在使用系统function时不会创build不必要的标志。

你可能要考虑的价值:

  • UIApplicationStateActive
  • UIApplicationStateInactive
  • UIApplicationStateBackground

例如

 +(BOOL) runningInBackground { UIApplicationState state = [UIApplication sharedApplication].applicationState; return state == UIApplicationStateBackground; } +(BOOL) runningInForeground { UIApplicationState state = [UIApplication sharedApplication].applicationState; return state == UIApplicationStateActive; } 

有些情况下,检查状态不起作用。

这里是我遇到的一个:如果你尝试使用BT,它被禁用,iOS会popup一个对话框询问用户是否打开BT。 发生这种情况时,应用程序状态不是一个可靠的方式来确定您的应用程序是否在前台。

首先,你会得到两个applicationDidBecomeActive事件 – 一个(正确)当应用程序出现,然后另一个(不正确)在用户按下对话框中的button(而iOS设置是最前面的应用程序)。

UIApplication.applicationState会说“主动”,即使情况并非如此(至less如果您将“主动”解释为在前景中,就像原来的问题那样)。

由于您在首次启动时没有获取到willEnterForeground,所以检测应用程序是否可见的唯一可靠方法是(只要我已经能够find),就是有一个标志,然后将其设置为true:

 applicationDidFinishLaunching applicationWillEnterForeground 

并在

 applicationDidEnterBackground applicationWillResignActive