我正在尝试实现一项功能,当用户必须物理行进到达特定地理点 (CLLocation
),这样他就必须现在离开才能在特定时间 (NSDate
) 或之前到达该点。
我已经设法在后台实现位置更新,但这会导致一个问题:如果用户是静止的,则不会调用委托(delegate)方法。因此,永远不会创建本地通知
。
假设用户必须在下午 3 点之前回到某个地方,并且他选择了在他必须离开以准时到达目的地前 10 分钟收到提醒。他在下午 2 点到达一家咖啡馆,到达目的地的行车时间为 20 分钟。这意味着他想在下午 2.30 收到通知。因此,本地通知不会在到达时创建,因为距离他想要收到通知还有 30 分钟。由于他在餐厅时没有移动,代表永远不会收到有关其位置的新更新,因此无法在下午 2.30 创建该通知。
我想要实现的是一种使用新位置调用代理的方法,比方说每 2.5 或 5 分钟或类似的时间,除了位置的任何重大变化。 我读过一些关于这个主题的问题,但大多数问题似乎都是针对 iOS 版本 < 7,其中大部分不再有效。
因此,我很好奇你们中是否有人知道我如何实现这一点,或者你们是否有其他可行的解决方案。
任何帮助将不胜感激!
最佳答案
当您到达该位置时,您知道您需要在 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];
关于ios - 在后台获取定期位置更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24234750/