我使用以下代码获取了我的位置信息:
- (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秒的间隔进行的。有没有办法让间隔更长?
答案 0 :(得分:3)
您的问题是距离滤镜设置。 kCLLocationAccuracyBest
为您提供最佳数据,但您几乎会不断获得更新。现在,除非您正在构建路线/路线应用程序,否则这可能不是您想要的,因为它效率不高。
设置距离过滤器如下:
_locationManager = [[CLLocationManager alloc] init];
_locationManager.distanceFilter = kCLLocationAccuracyHundredMeters; // One of several options...
或者,如前所述,您可以使用重要的更改API来接收更新。这些设计的频率会降低,但您无法控制收到更新的频率。
调用此方法开始接收这些更新:
[_locationManager startMonitoringSignificantLocationChanges]
最常见的做法是在你的应用程序背景下执行此操作。
查看文档以获取更多信息:
答案 1 :(得分:1)
使用startMonitoringSignificantLocationChanges
也应该有助于设置distanceFilter
答案 2 :(得分:1)
选项1
在您的位置管理器上使用- (void)startMonitoringSignificantLocationChanges
,只有在检测到用户位置发生重大变化时才会更新事件。例如,当设备与不同的手机信号塔相关联时,它可能会生成新事件。
选项2
您可以尝试降低监控的准确性。
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
[locationManager startUpdatingLocation];
不要使用kCLDistanceFilterNone
,因为它会报告每一个动作。
“报告所有动作”
并将准确度值设置为:
kCLLocationAccuracyNearestTenMeters
kCLLocationAccuracyHundredMeters
kCLLocationAccuracyKilometer
kCLLocationAccuracyThreeKilometers