в моем приложении IOS я реализую геозону. В текущей реализации я использую такой код:
CLRegion* region3 = [[CLRegion alloc] initCircularRegionWithCenter:coordinates radius:100 identifier:@"region3"];
[self.locationManager startMonitoringForRegion:region desiredAccuracy:kCLLocationAccuracyHundredMeters];
а затем я использую эти методы делегата:
(void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region{
NSLog(@"didenterregion");
}
(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region{
NSLog(@"didexitregion");
}
(void)locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(CLRegion *)region withError:(NSError *)error
{NSLog(@"monitoringDidFailForRegion");}
Однако этот код работает нормально только для радиуса более 100 м.
Вот несколько вопросов:
- Apple говорит, что в iOS6 и выше радиус от 1 до 400 м поддерживается для устройств 4s и выше. Поскольку мне все равно, сколько времени потребуется для просмотра сообщения (например, мне все равно, чтобы увидеть сообщение при входе в регион, но я хочу увидеть его позже, если я когда-то прошел из этого региона), могу ли я использовать меньший радиус? Меня интересует что-то вроде радиуса 50 м или меньше? (в некоторых регионах для моего случая понадобится даже 20м).
Я тоже так думаю. Apple заявляет, что может поддерживаться до 20 регионов. Каковы преимущества/недостатки такого решения (я еще не реализовал его, но мне нужно ваше мнение).
Псевдокод будет таким:
Declare the regions - save them in an array
Do not call start monitoring
И затем в методе делегата:
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
for loop in all my regions {
if ([region containsCoordinate: newLocation.coordinate])
code for entering region
}
}
- Было бы медленнее?
- Будет ли это потреблять больше батареи? (думаю мониторинг по регионам не жрет батарею)?
- Можно ли точнее?
- Могу ли я иметь более 20 регионов, так как я не регистрируюсь для мониторинга?
Заранее спасибо.