ios - 在后台获取定期位置更新

标签 ios cocoa-touch notifications cllocationmanager multitasking

我正在尝试实现一项功能,当用户必须物理行进到达特定地理点 (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/

相关文章:

iphone - 点击 UITextView 中的单词

objective-c - IOS:NSOrderedDescending 和 NSOrderedAscending 的问题

Android前台服务通知未显示

ios - iBeacon 为多个信标发送通知

ios - 通过 CKSubscription 观察 CKRecord 删除不起作用

ios - Ad-Hoc 配置文件显示 "Certificate not installed",即使 App Store 配置文件正常?

iphone - [ios.cocos2d+box2d]如何关闭自动旋转?

ios - 从不同的 View 更改 View textLabel

iphone - 我可以创建一个继承自 UIViewController 的自定义子类的 UITableViewController 吗?

swift - 本地通知覆盖之前的本地通知