2015-12-09 64 views
1

我已经开发iBeacon显示应用。当应用程序处于后台模式并且我进入信标区域时,触发UILocalNotification。但事情是,如果我杀了应用程序的通知仍然触发。当应用程序处于后台时,我使用locationMgr.RequestAlwaysAuthorization();来捕获位置更改。我已经写了背景安全的任务,以扩大我在iPhone上的背景时间。防止UILocalNotifications当应用程序被杀害

我曾尝试使用UIApplication.SharedApplication.ApplicationState但是当应用程序在后台只,而不是终止它返回true。

我使用locationMgr.RequestAlwaysAuthorization();,因为DidEnterRegion仅在位置设置为时才被调用总是

一句话我正在寻找解决方案如何监控EnterRegion & ExitRegion只在后台和活动模式。 没有当应用程序被杀害

回答

2

在iOS 7.1之前,这是iOS的默认行为,每个人都抱怨它。自iOS 7.1以来,信标监控将启动应用程序,即使它们已被杀死。

你需要的是检测是否当它再次推出这样你就可以抑制通知应用程序之前已杀死的方式。不幸的是,我不知道有什么办法做到这一点。

2

有几个原因,一个应用程序将被终止(不运行):

  • 因为用户主动终止它(在home键双击,刷卡应用了)

  • 因为操作系统所需的存储器,并且终止它

  • 因为OS更新该应用程序,并终止它

  • ,因为该设备已重新启动,并且应用程序尚未启动

你想避免在所有情况下通知,或仅在第一个?

如果你想避免在所有情况下通知,你可以尝试删除你的AppDelegateapplicationWillTerminate:方法本地通知(或为通知观察员):

- (void)applicationWillTerminate:(UIApplication *)application 
{ 
    [application cancelLocalNotification:<insert here the notification you saved>]; 
} 

(你可以选择使用cancelAllLocalNotifications,或搜索使用scheduledLocalNotifications)的通知。

如果你只是想避免在第一种情况的通知,我怕我不知道的任何方式来检测用户已经积极终止应用程序。

+0

我试着在AppDelegate的applicationWillTerminate方法中将静态属性设置为true,然后在我的方法中检查它是否属实,但它仍然是false.Weird,但似乎'applicationWillTerminate'没有被调用。 –

+0

用什么方法?叫什么时候?除非你从'applicationWillTerminate'调用它,否则它将永远不会是真的,因为当时应用程序已经退出。您需要将其保存到某些永久存储器(例如'NSUserDefaults',一个文件,核心数据...)。您可以通过在那里添加一个日志并检查设备的日志来检查是否调用了“applicationWillTerminate”。请注意,如果您从Xcode停止该应用程序,该应用程序将立即终止,并且'applicationWillTerminate'确实不会被调用。 – jcaron

+0

请注意,如果iOS在您的应用程序未运行时终止,即它处于“暂停”状态,则不会调用“applicationWillTerminate”。如果它不处于挂起状态,即在后台运行,则iOS将不愿意终止它,除非它已经终止了所有挂起的应用程序,并且仍然需要更多的内存。 *长话短说*,'applicationWillTerminate'几乎肯定不是你的问题的答案。 – heypiotr

相关问题