2016-04-07 2 views
-1

У меня есть приложение, которое контролирует некоторые регионы (геообъективы), которые каждый регион представляет собой магазин, приложение уведомляет пользователя, когда он подходит к хранилищу.locationManager: didEnterRegion: сработал без изменения местоположения

По какой-то причине приложение отправляет уведомление каждые 20 минут, когда пользователь уже находится в круге региона.

Все работает нормально, но когда пользователь находится в регионе в течение долгого времени, приложение будет уведомлять его, пока он не выйдет из региона.

Любая идея, почему это происходит? Спасибо!

+0

как насчет остановить обновления пока вы получите didExitRegion? – HardikDG

+0

если вы можете добавить код для этого, он будет лучше – Shreyank

+0

@Pyro, если я перестану следить за магазином 'didExitRegiin' не называется –

ответ

1

Когда вы создаете locationManager и вызываете startUpdatingLocation, он начинает давать вам координаты вашего симулятора или устройства непрерывно, с очень небольшими различиями в значениях координаты. Вам нужно вызвать stopUpdatingLocation.

For your case you need to stopUpdatingLocation when user exist the region or you can record the last location like this: 


-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations 
{ 


CLLocation *newLocation = [locations lastObject]; 
[locationManager stopUpdatingLocation]; 

} 
+0

Я пользуюсь Значительные изменения местоположения –

1

У нас происходит то же самое. Мы просто отслеживаем координаты региона, а когда приходит новый, мы можем определить, отличается ли новая координата от региона, в котором мы находимся. Если это не так, мы игнорируем его. Если да, то мы предпримем следующее подходящее действие. Надеюсь, это поможет!

* UPDATE *

Вот как мы определяем, что достаточно изменить, чтобы принять меры:

- (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; 
} 
+0

Привет, Брайан, спасибо за ваш ответ. Как вы можете проверить, существенно ли это? Возможно ли опубликовать этот метод? Это будет очень полезно! Спасибо! –

+0

Пожалуйста? Я действительно нуждаюсь в нем –

+0

Да, я добавлю его как обновленное выше. Это чрезвычайно рудиментарно. Надеюсь, это поможет, извините за задержку! –

Смежные вопросы