我需要不断监控用户的位置,以便在他接近有趣的事情时通知他。这是实现这一目标的正确方法吗?
我无法在后台运行计时器(定期更新用户在服务器上的位置),我还读到订阅重要位置更改可能会让我收到位置更新,即使应用程序未运行,但我无法实现它。 我在正确的道路上吗?还有其他选择吗?
编辑 - 有一个必要条件,我应该暴露,这可能让我放松对真正问题的关注:
答案 0 :(得分:0)
您可以在VC中设置监控位置内容,如下所示
在viewDidLoad方法中执行如下
CLLocationManager locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.distanceFilter = kCLDistanceFilterNone;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;(Accuracy according to your need)
[locationManager startUpdatingLocation];
比必须覆盖CLLocationManagerDelegate协议的两个可选委托方法
for iOS6 +
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{}
和iOS 2到6
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
在这些方法中,您将获得更新的位置。根据需要使用它。每次位置更新这些方法都会得到电话。
答案 1 :(得分:0)
您需要的是地理围栏。在iOS中,它被称为“区域监控”。您可以从CLLocationManager
指南中的startMonitoringForRegion:
开始。更多细节在Region Monitoring Guide
在iOS中,系统会始终跟踪与您的应用相关联的区域,包括您的应用未运行时。如果在应用未运行时越过区域边界,则会将该应用重新启动到后台以处理该事件。同样,如果应用程序在事件发生时被暂停,则会被唤醒,并且会花费很短的时间(大约10秒)来处理事件。
答案 2 :(得分:0)
据我所知,当应用程序在后台运行或未被系统暂停(终止)时,重要的更改位置更新是更新当前位置的唯一方法。当发生这种情况时,请务必检查UIApplicationLaunchOptionsLocationKey并初始化CLLocationManager以处理位置更改通知。如果应用程序在前台运行,那很简单。
顺便说一句,为了让系统不断更新应用程序的位置,您必须为项目启用地图功能和背景模式(位置更新)。
阅读Apple位置/地图文档以获取更多详细信息。
答案 3 :(得分:0)
免责声明:我为Cintric工作
我们在Cintric遇到了类似的问题,实际上是为了这个目的而制作了一个工具。即使在应用程序退出后,它也会跟踪背景中的位置,仅使用1%的电池!
您可以下载.framework文件,将其拖入项目并使用一行代码进行初始化:
[CintricFind initWithApiKey:@"YOUR_API_KEY_HERE" andSecret:@"YOUR_SECRET_HERE"];
您可以免费获得API密钥。
这里有文档:https://www.cintric.com/docs/ios
此处有一篇博客文章进一步解释:http://www.blog.cintric.com/?p=121