2014-01-21 4 views
2

На iOS в моем делете приложения Я запускаю мониторинг области, и как только я вхожу в область маяка, я запускаю логику ранжирования, используя locationManager: didRangeBeacons: inRegion. Согласно документации Apple, этот метод следует вызывать только тогда, когда область попадает в диапазон или выходит за пределы диапазона или когда диапазон изменяется.Диапазон интервалов между маяками

Моя проблема заключается в том, что я получаю призыв к этому методу каждую секунду, пока я нахожусь внутри региона. Как уменьшить количество вызовов этого метода, пока он еще находится?

ответ

1

Согласно Документам:.

«Менеджер расположения вызывает этот метод, когда маяк приходит в пределах диапазона или выходит из диапазона Менеджер расположения также вызывает этот метод, когда диапазон изменения радиомаяка, например, когда маяк приближается ».

Возможно, что происходит изменение диапазона, которое вызывает поведение, которое вы описываете.

Почему это проблема

EDIT:

в фоновом режиме, вы получите уведомление о вводе регионов с помощью метода приложение делегата:

- (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region{} 

Вы можете использовать эту функцию, чтобы определить состояние :

if(state == CLRegionStateInside) 
{ 
    //Inside a region: 
} 
else if(state == CLRegionStateOutside) 
{ 
    //Outside a region 
} 
else { 
    //Something else 
} 

Вы можете использовать это, чтобы собрать ограниченное количество или попросить пользователя загрузить приложение через локальное уведомление. Когда ваше приложение возобновится, вы можете собрать дополнительную информацию через диспетчер location.

+0

Я хочу обрабатывать ранжирование в фоновом режиме. Когда пользователь входит в диапазон маяка, я хочу получить подробную информацию о маяке (-ах) - и это происходит в этом методе. Меня не интересует информация о близости, поэтому я не хочу, чтобы этот метод назывался так много. Я также прочитал, что для диапазона требуется больше энергии, чем мониторинг региона, и это может привести к утечке пользовательской батареи. –

+0

Редактировал ответ – CW0007007

6

locationManager:didRangeBeacons:inRegionраз в секунду, несмотря ни на что. Каждый раз, когда он вызывается, параметр beacons будет содержать массив всех маяков, которые приложение может видеть в настоящее время, упорядоченное по близости. Невозможно ограничить частоту, с которой этот метод вызывается, до остановки диапазона.

Когда мониторинга областей (вместо ранжирования), ваше приложение будет иметь didEnterRegion: и didExitRegion называется, вместе с didDetermineState:. См. this answer для получения более подробной информации.

+0

Есть ли способ получить информацию о маяках, используя только информацию о регионах (в основном, чтобы получить информацию маяка в фоновом режиме)? –

+0

Кажется, вы можете вызвать 'startRangingBeaconsInRegion:' когда 'didEnterRegion:' был вызван, но приложение будет пробуждено только на очень короткий промежуток времени. На самом деле не рекомендуется делать это в фоновом режиме. –

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