3

我目前正在使用其他开发人员启动的 iOS 应用程序。该应用需要监控位置变化,因为它需要以低精度(百米)了解用户位置。之前的位置实现是使用NSTimerand完成的startUpdatingLocation。执行是这样的:

// Fire each 10 seconds start updating location
self.timerPosition = [NSTimer scheduledTimerWithTimeInterval:ti
                                                      target:self
                                                    selector:@selector(location)
                                                    userInfo:nil
                                                     repeats:YES];
[self.timerPosition fire];

位置选择器执行此操作

// Configure & check location services enabled
...
self.locman.delegate = self;
self.locman.desiredAccuracy = kCLLocationAccuracyHundredMeters;
[self.locman startUpdatingLocation];

然后在位置管理器委托中

[manager stopUpdatingLocation];

但是阅读有关在 Apple 文档中获取用户位置的信息,似乎以低功耗获取位置的正确方法是使用startMonitoringSignificantLocationChanges.

startMonitoringSignificantLocationChanges我的问题是,将位置计时器与而不是相结合是一个好的决定startUpdatingLocation,还是一种无意义的方法?

当应用程序在后台时,我不需要获取位置,但我想知道当应用程序处于活动状态时用户何时更改了它的位置。

4

1 回答 1

1

我可以告诉你,当你使用低功耗 -startMonitoringSignificantLocationChanges 时,定时器不能也不需要。该方法仅在设备检测到更改时响应来自委托的回调。此位置检查不使用 GPS,它使用 Wifi 和已经发生的蜂窝塔三角测量。因此,通过使用这种方法,无需减慢速度以节省电池寿命。只需设置委托方法并做出相应的响应。

我不确定您实施位置的目的是什么,但区域监控也是另一种使用很少或不使用电池来获取位置更新的好方法。当您需要监控特定位置而不是一般用户位置时,区域监控会更有帮助。希望这可以解决问题。

于 2013-01-02T20:35:12.833 回答