locationManager:didEnterRegion:在没有位置更改的情况下触发

时间:2016-04-07 10:17:18

标签: ios objective-c iphone cocoa-touch cllocationmanager

我有一个应用程序监视某些区域(地理围栏),每个区域代表一个商店,应用程序会在他接近商店时通知用户。

出于某种原因,当用户已经进入该区域的圈子时,该应用每隔20分钟发送一次通知。

一切正常,但当用户长时间进入某个地区时,该应用会一直通知他,直到他退出该地区。

知道为什么会这样吗?谢谢!

2 个答案:

答案 0 :(得分:1)

当您创建一个locationManager并调用startUpdatingLocation时,它会开始连续为您提供模拟器或设备的坐标,坐标值的差异非常小。你需要调用stopUpdatingLocation。

<input type="hidden" name="csrfmiddlewaretoken" value="PoSJf1brkjNTWeyHhlHHc0FMHlEEa4Wo">

答案 1 :(得分:1)

我们发生了同样的事情。我们只是跟踪区域坐标,当新的坐标进入时,我们有一种方法来确定新坐标是否与我们所处的区域“显着不同”。如果不是,那么我们忽略它。如果是,那么我们采取下一个适当的行动。我希望有所帮助!

*更新*

以下是我们如何确定有足够的变化采取行动:

- (BOOL) radiiAreSignificantlyDifferent:(CLLocationDistance) newRadius oldRadius:(CLLocationDistance)oldRadius
{
    // radii are in kilometers
    return (newRadius > oldRadius + 1.5 || newRadius < oldRadius - 1.5) ? YES : NO;
}

- (BOOL) locationsAreSignificantlyDifferent:(CLLocation*) newLocation oldLocation:(CLLocation*)oldLocation
{
    BOOL different = NO;

    if (oldLocation == nil) {
        different = YES;
    }else{
        // have we moved at least a quarter mile?
        different = ([newLocation distanceFromLocation:oldLocation] > 400.0)? YES : NO;
    }

    return different;
}