Мониторинг региона Core Location

Кто-нибудь знает какие-либо знания об использовании этого:

- (void) startMonitoringForRegion:(CLRegion *)region desiredAccuracy:(CLLocationAccuracy)accuracy

Я пытаюсь реализовать это в своем проекте, но:

- (void) locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region

никогда не вызывается?

У кого-нибудь есть пример кода или он знает, почему это происходит?

Мой код выглядит следующим образом. Я создал такой метод в своем собственном классе LocationManager:

 - (void) locationManagerStartMonitoringRegion:(CLRegion *)region withAccuracy:(CLLocationAccuracy)accuracy {
    NSLog(@"Start Monitoring");
    [locationManager startMonitoringForRegion:region desiredAccuracy:accuracy];
    NSLog(@"Monitored Regions: %i", [[locationManager monitoredRegions] count]);
}

Затем я называю это так:

CLLocationCoordinate2D coordinates = CLLocationCoordinate2DMake(51.116261, -0.853758);     
CLRegion *grRegion = [[CLRegion alloc] initCircularRegionWithCenter:coordinates radius:150 identifier:[NSString stringWithFormat:@"grRegion%i", value]];

[locationManager locationManagerStartMonitoringRegion:grRegion withAccuracy:kCLLocationAccuracyBest];

Я получаю NSLog:

2011-01-30 19:52:26.409 TestingLocation[10858:307] Начать мониторинг

2011-01-30 19:52:27.103 TestingLocation[10858:307] Отслеживаемые регионы:

Но никогда не получайте NSLog из:

 - (void) locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region     {
    NSLog(@"Entered Region");
}

or

 - (void) locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(CLRegion *)region withError:(NSError *)error {
    NSLog(@"monitoringDidFailForRegion: %@",error);
}

Спасибо


person jodm    schedule 30.01.2011    source источник
comment
Не могли бы вы опубликовать код, который вы используете? Без контекста сложно помочь.   -  person Jumhyn    schedule 30.01.2011
comment
Код теперь добавлен к исходному сообщению выше.   -  person jodm    schedule 30.01.2011
comment
Вы установили свой класс LocationManager в качестве делегата CLLocationManager?   -  person Mark Adams    schedule 31.01.2011
comment
@jodm все еще сталкивается с этой проблемой. ты получил решение для этого. Вы можете вызвать didEnterRegion. помогите с рабочим примером   -  person sm abbas    schedule 15.12.2011


Ответы (5)


Вам нужно будет проделать довольно долгий путь, чтобы система мониторинга регионов заработала. Его текущая степень детализации, по-видимому, основана на том, когда он передается от одной сотовой вышки к другой — в моем тестировании мне нужно было пройти милю или больше, чтобы он зарегистрировал, что я окончательно покинул небольшой регион, который я установил.

person Noah Witherspoon    schedule 31.01.2011
comment
Сегодня утром по дороге в офис зарегистрировал около 5 точек по дороге и 3 из них сработали. Это, безусловно, так. didEnterRegion вызывается только при смене вышки сотовой связи ИЛИ при значительном изменении местоположения. Это не помогает в контексте, который я хотел использовать для мониторинга региона :( - person jodm; 31.01.2011
comment
@jodm, я знаю, что это было больше года назад, но стало ли лучше? У меня та же проблема, когда у меня были точки, которые не срабатывали или срабатывали очень поздно. Должен быть лучший способ.. - person ari gold; 15.09.2012
comment
Я могу подтвердить, что в мониторинге региона в какой-то мере используется важное местоположение. Я разобрал бинарный файл фреймворка и нашел материалы, связанные с вызовами значимого местоположения. Но даже все равно это неубедительно. - person Nate Symer; 21.07.2013

Точность улучшена в iOS 5.

person Andrew Thomas    schedule 13.09.2011
comment
У вас есть ощущение того, что было исправлено? У меня все еще есть проблемы в Юджине, штат Орегон (~ 150 000 человек), что наводит меня на мысль, что это основано на сотовых вышках и WiFi. Конечно, это было бы безумием, поскольку в этом случае мониторинг региона будет полезен только в густонаселенных городских районах. - person ari gold; 18.09.2012
comment
Он работает в iOS 5 и 6 на основе вышек сотовой связи и Wi-Fi. Лучше всего он работает в условиях плотной городской застройки. Единственные места, где у меня есть жалобы на мое приложение, — это очень пустынные районы (остров, северная Канада). - person Andrew Thomas; 18.09.2012

Ответ :

- (void) startMonitoringForRegion:(CLRegion *)region desiredAccuracy:(CLLocationAccuracy)accuracy

устарел в ios 6.o. Вместо этого используйте `- (void) startMonitoringForRegion:(CLRegion *)region.

Спасибо, Абдул`

person Abdul Yasin    schedule 15.07.2013
comment

Ну, вы можете отслеживать несколько регионов и имитировать местоположение в Xcode (с панели над отладчиком), чтобы проверить, работает ли он или нет. Я проверил, и он работает довольно гладко.

person Gautam Jain    schedule 11.03.2015

Мне нужно посмотреть, где вы настраиваете свой экземпляр locationManager. Но, поскольку @Mark Adams пытается ускользнуть, вам нужно установить текущий класс в качестве делегата для locationManager, чтобы он знал, в какой класс отправлять сообщения обратно. Это так же просто, как:

locationManager.delegate = self;

person raidfive    schedule 31.01.2011