我正在制作一款应用程序,需要计算在轨道上行走的参与者的圈数。我认为我可以在起点周围创建一个小的地理围栏,并让操作系统在用户输入时告诉我,但这似乎并不像我希望的那样好。当步行者进入围栏或在轨道周围的其他区域触发时,似乎没有可靠地触发它。 (我正在测试而不让设备此时进入睡眠状态。)
在我的测试中似乎没有正确调用locationManager:didExitRegion
方法。
当用户点击开始按钮时,将调用以下方法:
-(void)startLocationManager {
if ([CLLocationManager locationServicesEnabled] && usingLocationManager) {
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
self.locationManager.delegate = self;
self.locationManager.distanceFilter = kCLLocationAccuracyBest;
self.locationManager.activityType = CLActivityTypeFitness;
[self.locationManager startUpdatingLocation];
}
}
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
CLLocation *lastLocation = [locations lastObject];
if (lastLocation.horizontalAccuracy > 10) {
return;
}
// setup a geocode fence and count as user enters fence
self.startRegion = [[CLCircularRegion alloc] initWithCenter:lastLocation.coordinate radius:10 identifier:@"startPosition"];
[self.locationManager stopUpdatingLocation];
[self.locationManager startMonitoringForRegion:self.startRegion];
}
-(void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
lapCount++;
[self updateLapDisplay];
}
我做错了什么或者我不能以这种方式使用CoreLocation
吗?
答案 0 :(得分:0)
地理围栏对此无效。您无法依靠它准确或可靠地触发。以正常方式使用位置管理器及其代理,并在用户到达10或20米范围内时手动触发,然后在距离它50或100米时重置触发器。