iOS如何判断应用程序是在前台运行还是后台运行?
Posted
技术标签:
【中文标题】iOS如何判断应用程序是在前台运行还是后台运行?【英文标题】:iOS how to judge application is running foreground or background? 【发布时间】:2012-01-07 15:18:07 【问题描述】:众所周知,如果 ios 应用在前台运行,那么当删除通知到来时,该应用不会通知用户。现在在我的应用程序中,我想显示警报以通知用户远程通知来了。如何判断app是运行在前台还是后台?我找到了文档并搜索了 ***.com,但没有找到任何相关信息。 谢谢。
【问题讨论】:
抱歉我的拼写错误。 【参考方案1】:[UIApplication sharedApplication].applicationState
将返回当前状态,检查可能的值,并且在您可以使用系统功能时不要创建不必要的标志。
您可能需要考虑的值:
UIApplicationStateActive UIApplicationStateInactive UIApplicationStateBackground例如
+(BOOL) runningInBackground
UIApplicationState state = [UIApplication sharedApplication].applicationState;
return state == UIApplicationStateBackground;
+(BOOL) runningInForeground
UIApplicationState state = [UIApplication sharedApplication].applicationState;
return state == UIApplicationStateActive;
【讨论】:
太棒了,你的回答很棒! 不知道该属性 - 方便! 可能的值为:UIApplicationStateActive、UIApplicationStateInactive 或 UIApplicationStateBackground。 还有,UIApplicationStateActive【参考方案2】:在某些情况下检查状态不起作用。
这是我遇到的一个问题:如果您尝试使用 BT 并且它被禁用,iOS 会弹出一个对话框询问用户是否要打开 BT。发生这种情况时,应用程序状态不是确定您的应用程序是否在前台的可靠方法。
首先,您将收到两个 applicationDidBecomeActive 事件 - 一个(正确)在应用出现时,然后另一个(错误)在用户按下对话框中的按钮后(而 iOS 设置是最前面的应用) .
UIApplication.applicationState 会说“活动”,即使情况并非如此(至少如果您将“活动”解释为在前台,就像原来的问题一样)。
由于您在首次启动时没有得到 willEnterForeground,因此检测应用程序是否可见的唯一可靠方法(据我所知)是设置一个标志,然后将其设置为 true在:
applicationDidFinishLaunching
applicationWillEnterForeground
假的:
applicationDidEnterBackground
applicationWillResignActive
【讨论】:
感谢您的回答 NJ,自从您发布此消息以来,您认为这仍然可靠吗? 是的,我不知道有任何情况下它不起作用。 如果您有 VoIP 应用程序,这将不起作用。在设备启动时它会自动启动,你只会得到applicationDidFinishLaunching
,你会假设它在前台(因为你不会得到applicationWillEnterForeground
),但实际上它是在后台,正如applicationState
正确说明的那样。所以 Pavel Oganesyan 是对的,但是您需要同时检查 UIApplicationStateActive
和 UIApplicationStateInactive
状态以了解正确的前台状态。
纠正 voip 应用程序,遗憾的是,似乎没有可靠的方法来确定前台状态...以上是关于iOS如何判断应用程序是在前台运行还是后台运行?的主要内容,如果未能解决你的问题,请参考以下文章
Android判断应用在前台还是后台运行(判断应用前后台切换)