2013-04-23 7 views
0

У меня не было ничего, кроме проблем, связанных с мониторингом региона на iPhone. Прежде всего у меня никогда (ни разу не было) было didEnterRegion или didExitRegion пожар на моем устройстве iPhone 4.iOS: мониторинг региона с помощью симулятора отключен

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

Следующее было сделано в тренажере, изменив расположение в меню Debug

я, наконец, получил didEnterRegion стрелять, хотя я был около 8 городских кварталов от круга в вопросе. Когда я выходил из региона, didExitRegion стрелял около 200 раз подряд. Это ошибка симулятора? Я почти готов отказаться от этого и начать вычислять этот материал сам, потому что он становится смешным.

Любые идеи относительно того, почему точность настолько плоха и почему мои методы увольняются так много раз?

Вот соответствующий код:

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *) launchOptions 
{ 
    locationManager = [[CLLocationManager alloc] init]; 
    locationManager.delegate = self; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest; 

    CLLocationDegrees latitude = 45.50568; 
    CLLocationDegrees longitude = -73.57033; 
    CLLocationCoordinates2D centerCoordinate = CLLocationCoordinate2DMake(latitude, longitude); 

    CLLocationDistance regionRadius = 200.0; 

    CLRegion *myRegion = [[CLRegion alloc] initCircularRegionWithCenter:centerCoordinate radius:regionRadius identifier:@"aroundWork"]; 

    [locationManager startMonitoringForRegion:myRegion]; 

    return YES: 
} 

-(void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region 
{ 
    NSLog(@"Entered region: %@", region.identifier); 
} 

-(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region 
{ 
    NSLog(@"Exited region: %@", region.identifier); 
} 
+0

Не видя ни одного из ваших кодов, мы не знаем, правильно ли вы делаете (возможно, не так, как многие другие использовали эти методы без проблем) или ошибка симулятора. – sosborn

ответ

3

Прежде всего, я предполагаю, что вы проверяете его на тренажере с файлом GPX, как и любой другой способ, было бы неправильно.

Теперь, потому что я сделал обширные исследования по области мониторинга:

мониторинг Регион не очень эффективным. Он может пропустить регион, который легко входит или выезжает.

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

Иногда это работает красиво, иногда это терпит неудачу.

Я предлагаю вам немного поиграть с настройками границы области (радиус) и выполнить РЕАЛЬНЫЕ тесты (прогуливаться или проезжать по определенным точкам), чтобы видеть, что ведет себя лучше.

Наши тесты показали, что меньшие значения ведут себя лучше (радиус 100-200 м), а также то, что мониторинг области ведет себя лучше, когда вы на самом деле едете, а не ходить.

Помните, что он использует антенны с ячеистой антенной для размещения вас, что намного менее точно, чем gps.

+0

Ну, тогда было бы разумнее просто искать существенное изменение местоположения, повернуть GPS один раз, чтобы получить одно место, затем немедленно выключить его, а затем просто вычислить мое собственное расстояние до центров кругов, чтобы определить себя, является ли пользователь внутри или за пределами определенного региона? Я точно не знаю, кто-то выходит или входит, просто если они в регионе или нет. Как вы думаете? – PaulG

+0

Значительные изменения местоположения используют ту же самую технологию, чтобы найти местоположение пользователя, поэтому я не понимаю, почему вы выиграли бы от этого больше. Если приложение открыто, то использование gps через определенные промежутки времени будет, вероятно, лучшим, однако, если вы хотите узнать местоположение пользователя также, когда приложение находится на заднем плане, тогда мне не нужно предлагать лучший способ. Я не знаю, знает ли кто-нибудь что-то лучше ... – Lefteris

+0

Идеальный размер области на самом деле отличается от версии iOS, которую вы используете. Во время вождения вы, вероятно, пересекаете буферную зону до того, как устройство произведет уведомление. В то время как в фоновом режиме устройство действительно использует GPS в режиме с низким энергопотреблением. (поэтому он появляется в службах местоположения как маленькая стрелка, указывающая, что ваше приложение использует его) – Pochi

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