Удалить 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