Удалить CLBeaconRegion из мониторинга в зависимости от текущего местоположения

Поэтому я искал способ удалить BeaconRegion из отслеживаемых регионов в зависимости от того, как далеко он находится от моего текущего местоположения. Я, хотя я мог бы использовать свойство center, хотя я думаю, что я что-то упустил... Потому что значения широты / долготы, как недопустимые...

po [region center]
(latitude = 0.0000000000000000000000000000000000000000000000000000000033891907065820605, longitude = 0.000000000000000000000000000000000000059293723668713039) 

Как я могу удалить BeaconRegion в зависимости от текущего местоположения?

2 ответа

Решение

CLBeaconRegion представляет N Bluetooth-маяков с одинаковым UUID. у ibeacon нет координаты GPS. у него есть значение RSSI (уровень сигнала) и свойство "вычисленной" близости, но нет местоположения.

так же, как Wi-Fi-роутер;) есть сервисы для связи маяков / Wi-Fi-роутеров с GPS-местоположением, но это не стандартно. как должен знать маяк?:)


В IOS класс CLBeaconRegion имеет только свойство center, поскольку он является подклассом CLRegion.

если вы знаете местоположение GPS ваших регионов, используйте эти данные + местоположение вашего устройства

Да, вы можете прекратить мониторинг CLBeaconRegion в зависимости от местоположения пользователя. Но, как вы обнаружили, center свойство этого объекта не поможет вам в этом (объяснение причин см. в ответе @Daij-Djan.)

Типичный способ сделать это - настроить получение значительных изменений местоположения с помощью CLLocationManager в то же время, когда вы настраиваете мониторинг маяка, вот так:

[locationManager startMonitoringSignificantLocationChanges];

Затем вы добавляете метод, как показано ниже delegate вашей CLLocationManager чтобы получать обратные вызовы каждый раз, когда пользователь значительно меняет местоположение:

- (void)locationManager:(CLLocationManager *)locationManager
      didUpdateLocations:(NSArray *)locations {
   CLLocation* location = [locations lastObject];
   NSLog(@"latitude %+.6f, longitude %+.6f\n",
          location.coordinate.latitude,
          location.coordinate.longitude);
   // TODO: change the monitored beacon regions depending on the
   // location.coordinate.latitude and location.coordinate.longitude     
   }
}

Обратите внимание, что вам также нужно убедиться, что службы определения местоположения авторизованы для вашего приложения, чтобы это работало, и поместите строку, соответствующую NSLocationAlwaysUsageDescription введите ваш список, но это та же самая проверка, которую вы должны сделать, чтобы отслеживать маяки:

if([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
    [locationManager requestAlwaysAuthorization];
}

Для получения более подробной информации об изменениях местоположения см. Здесь: https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html

Другие вопросы по тегам