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

时间:2011-11-28 03:25:11

标签: ios foreground

众所周知,如果iOS应用程序正在运行前台,那么当删除通知到来时,应用程序将不会通知用户。现在在我的应用程序中,我想显示警告以通知用户远程通知到来。如何判断应用程序是运行前台还是后台?我找到了docs并搜索了stackoverflow.com,却找不到任何相关内容。 谢谢。

2 个答案:

答案 0 :(得分:73)

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

您可能需要考虑的值:

  • UIApplicationStateActive
  • UIApplicationStateInactive
  • UIApplicationStateBackground

e.g。

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

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

答案 1 :(得分:5)

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

以下是我遇到的问题:如果您尝试使用BT并且已禁用,则iOS会弹出一个对话框,询问用户是否要打开BT。发生这种情况时,应用程序状态不是确定您的应用程序是否位于前台的可靠方法。

首先,您将获得两个applicationDidBecomeActive事件 - 一个(正确)当应用程序出现时,然后另一个(不正确)用户按下对话框中的按钮(而iOS设置是最前面的应用程序)

UIApplication.applicationState会说“Active”,即使情况并非如此(至少如果你将“active”解释为在前台,就像原始问题一样)。

因为你没有在第一次启动时获得willEnterForeground,所以检测应用程序是否可见的唯一可靠方法(据我能够弄清楚)是有一个标志然后将其设置为true在:

applicationDidFinishLaunching
applicationWillEnterForeground

和false in:

applicationDidEnterBackground
applicationWillResignActive