在后台获取定期位置更新

时间:2014-06-15 22:41:55

标签: ios cocoa-touch notifications cllocationmanager multitasking

我正在尝试实现一个功能,当用户必须实际行进到达特定地理位置(local notification)时,用户会收到警报(使用CLLocation)他现在必须离开,以便在特定时间(NSDate)或之前达到这一点。

我已设法在后台实现位置更新,但这会导致问题:如果用户静止,则不会调用委托方法。因此,永远不会创建local notification

假设用户必须在下午3点之前回到某个地方,并且他已经选择在他必须准时出发前10分钟收到警报。他于下午2点抵达咖啡馆,到达目的地的旅行时间为20分钟。这意味着他希望在下午2点30分得到通知。因此,本地通知不会在抵达时创建,因为在他希望收到通知之前仍然需要30分钟。由于他在餐厅不移动,代表从未收到有关其位置的新更新,因此无法在下午2:30创建该通知。

我想要实现的是一种方式来给代表打电话给一个新的位置让我们说每2.5或5分钟或类似的东西,除了位置的任何重大变化。 我已经阅读了一些关于这个主题的问题,但大多数似乎是针对iOS版本< 7,其中大部分不再起作用。

因此,如果你们中的任何一个人知道如何实现这一目标,或者如果你们有另一种可行的解决方案,我很好奇。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

当您到达该位置时,您知道您需要在30分钟内通知用户。因此,只需使用30分钟内的开火日期创建通知:

UILocalNotification *notification = [[UILocalNotification alloc] init];
notification.fireDate = [[NSDate date] dateByAddingTimeInterval:30*60];
notification.alertBody = @"You should leave now!";
[[UIApplication sharedApplication] scheduleLocalNotification:notification];

基本上,您应该在每次获得位置更新时创建通知,并取消之前的通知。

[[UIApplication sharedApplication] cancelLocalNotification:previousNotification];