不时更新位置

时间:2014-03-18 16:28:53

标签: ios cllocationmanager cllocation

我使用以下代码获取了我的位置信息:

- (id)init {
    if (self = [super init]) 
    {
        locationManager = [[CLLocationManager alloc] init];
        locationManager.delegate = self;
        locationManager.distanceFilter = kCLDistanceFilterNone;
        locationManager.desiredAccuracy = kCLLocationAccuracyBest;
        [locationManager startUpdatingLocation];
    }

    return self;
}

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
    NSLog(@"Location: %@", [locations lastObject]);
}

一切正常,问题是更新是以1秒的间隔进行的。有没有办法让间隔更长?

3 个答案:

答案 0 :(得分:3)

您的问题是距离滤镜设置。 kCLLocationAccuracyBest为您提供最佳数据,但您几乎会不断获得更新。现在,除非您正在构建路线/路线应用程序,否则这可能不是您想要的,因为它效率不高。

设置距离过滤器如下:

_locationManager = [[CLLocationManager alloc] init];
_locationManager.distanceFilter = kCLLocationAccuracyHundredMeters; // One of several options...

或者,如前所述,您可以使用重要的更改API来接收更新。这些设计的频率会降低,但您无法控制收到更新的频率。

调用此方法开始接收这些更新:

[_locationManager startMonitoringSignificantLocationChanges]

最常见的做法是在你的应用程序背景下执行此操作。

查看文档以获取更多信息:

https://developer.apple.com/library/mac/documentation/CoreLocation/Reference/CLLocationManager_Class/CLLocationManager/CLLocationManager.html

答案 1 :(得分:1)

使用startMonitoringSignificantLocationChanges也应该有助于设置distanceFilter

当然,请参阅文档CLLocationManager Class Reference

答案 2 :(得分:1)

选项1

在您的位置管理器上使用- (void)startMonitoringSignificantLocationChanges,只有在检测到用户位置发生重大变化时才会更新事件。例如,当设备与不同的手机信号塔相关联时,它可能会生成新事件。

选项2

您可以尝试降低监控的准确性。

locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
[locationManager startUpdatingLocation];

不要使用kCLDistanceFilterNone,因为它会报告每一个动作。

  

“报告所有动作”

并将准确度值设置为:

kCLLocationAccuracyNearestTenMeters
kCLLocationAccuracyHundredMeters 
kCLLocationAccuracyKilometer 
kCLLocationAccuracyThreeKilometers