我有一个应用程序监视某些区域(地理围栏),每个区域代表一个商店,应用程序会在他接近商店时通知用户。
出于某种原因,当用户已经进入该区域的圈子时,该应用每隔20分钟发送一次通知。
一切正常,但当用户长时间进入某个地区时,该应用会一直通知他,直到他退出该地区。
知道为什么会这样吗?谢谢!
答案 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;
}