如何在位置管理器的 didDetermineState 方法中消除监视区域的错误状态?
How can I eliminate false states of my monitored region in the location manager's didDetermineState method?
我正在使用
- (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLCircularRegion *)region
确定我的用户当前是否处于未跨越边界的区域。我遇到的问题是给出的状态是
CLRegionStateInside
尽管当时我的位置管理器的准确度可能是 4,000 米,如果我什至不靠近边界更不用说在区域内,这基本上给了我一个 "false state"。
所以问题是如何消除位置管理器在给定方法中给出的这些错误状态?
我考虑过将精度与经纬度一起保存并在检查该区域的状态之前检查它们。但我认为必须有更好的方法。现在我在 SO 寻找输入。
我之前试过这个,但似乎没有用,但后来我更改了我的位置管理器的委托,它现在似乎可以在 didDeterminState 方法中使用了。
CLLocation* location = [self.locationManager location];
NSDate* eventDate = location.timestamp;
float accuracy = location.horizontalAccuracy;
NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];
CLLocation* regionLocation = [[CLLocation alloc] initWithLatitude:region.center.latitude longitude:region.center.longitude];
CLLocationDistance distance = [location distanceFromLocation:regionLocation];
if (state == CLRegionStateInside && abs(howRecent) < 10 && accuracy <= 100 && distance < region.radius)
{
//Do Something
}
我正在使用
- (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLCircularRegion *)region
确定我的用户当前是否处于未跨越边界的区域。我遇到的问题是给出的状态是
CLRegionStateInside
尽管当时我的位置管理器的准确度可能是 4,000 米,如果我什至不靠近边界更不用说在区域内,这基本上给了我一个 "false state"。
所以问题是如何消除位置管理器在给定方法中给出的这些错误状态?
我考虑过将精度与经纬度一起保存并在检查该区域的状态之前检查它们。但我认为必须有更好的方法。现在我在 SO 寻找输入。
我之前试过这个,但似乎没有用,但后来我更改了我的位置管理器的委托,它现在似乎可以在 didDeterminState 方法中使用了。
CLLocation* location = [self.locationManager location];
NSDate* eventDate = location.timestamp;
float accuracy = location.horizontalAccuracy;
NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];
CLLocation* regionLocation = [[CLLocation alloc] initWithLatitude:region.center.latitude longitude:region.center.longitude];
CLLocationDistance distance = [location distanceFromLocation:regionLocation];
if (state == CLRegionStateInside && abs(howRecent) < 10 && accuracy <= 100 && distance < region.radius)
{
//Do Something
}