众所周知,如果iOS应用程序正在运行前台,那么当删除通知到来时,应用程序将不会通知用户。现在在我的应用程序中,我想显示警告以通知用户远程通知到来。如何判断应用程序是运行前台还是后台?我找到了docs并搜索了stackoverflow.com,却找不到任何相关内容。 谢谢。
答案 0 :(得分:73)
[UIApplication sharedApplication].applicationState
将返回当前状态,检查可能的值,并且在您可以使用系统功能时不要创建不必要的标志。
您可能需要考虑的值:
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