Геолокация с локальным уведомлением, таким как напоминание

Я хочу реализовать уведомление о геолокации, например, напоминания в приложении. это то, что я уже сделал:

в делегате приложения:

self.locationManager = [[[CLLocationManager alloc] init] autorelease]; /* don't leak memeory! */
[self.locationManager setDelegate:self];
[self.locationManager setDesiredAccuracy:kCLLocationAccuracyBest];

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

}

-(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
{

}

-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{

}

А вот этот в контроллере представления, который начинает мониторинг:

CLLocationCoordinate2D location2D = mapView.region.center; 
CLRegion *regionForMonitoring = [[CLRegion alloc] initCircularRegionWithCenter:location2D radius:1 identifier:@"RegionIdentifier"];
[[Utils getLocationManager] startMonitoringForRegion:regionForMonitoring];

Теперь я понятия не имею, что мне нужно сделать, чтобы запускать локальные уведомления с этой информацией.


person Community    schedule 30.01.2012    source источник


Ответы (2)


Я могу сказать вам, что ваш радиус, скорее всего, слишком мал, чтобы действительно вызвать обновление. У вас установлен радиус 1 метр. Это потребует обновления местоположения почти слишком точно, чтобы регистрировать что-либо, кроме проверки координат, которые вы передаете.

Предполагая, что вы получаете региональное событие, я бы поместил ваше локальное уведомление в методы -didEnterRegion или -didExitRegion. Вы можете создать свое уведомление, как сказал @Missaq.

UILocalNotification *notification = [[UILocalNotification alloc] init]; 
notification.fireDate = [NSDate date]; 
NSTimeZone* timezone = [NSTimeZone defaultTimeZone]; 
notification.timeZone = timezone; 
notification.alertBody = @"Notification message"; 
notification.alertAction = @"Show"; 
notification.soundName = UILocalNotificationDefaultSoundName; 
[[UIApplication sharedApplication] scheduleLocalNotification:notification];
[notification release]; // release if not using ARC

Имейте в виду, что вы не получите уведомление, если ваше приложение активно. Вам нужно будет находиться в фоновом режиме, если вы хотите, чтобы ваше уведомление срабатывало. Если ваше приложение активно, ожидается, что вы представите UIAlertView, а не UILocalNotification. Надеюсь это поможет.

person Bill Burgess    schedule 30.01.2012
comment
копаю тему. При таком подходе метод didEnterRegion запускается, только если ваше приложение не спит. Возможно ли иметь геолокализованное уведомление, даже если ваше приложение не запущено? - person Thomas Besnehard; 28.09.2012
comment
Эти методы следует вызывать независимо от того, находится ли ваше приложение на переднем плане или в фоновом режиме. Если вы не получаете эти вызовы в фоновом режиме, вероятно, ваш контроллер диспетчера местоположений работает неправильно. - person Bill Burgess; 30.09.2012

Попробуйте использовать

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

и

- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region;

методы делегирования.

person Community    schedule 30.01.2012
comment
Что я должен делать в этих методах? - person ; 30.01.2012
comment
хорошо - создавать локальные уведомления? - person ; 30.01.2012
comment
вот так: - (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region { UILocalNotification *notif = [[UILocalNotification alloc] init]; notif.fireDate = [NSDate date]; NSTimeZone* tz = [NSTimeZone defaultTimeZone]; notif.timeZone = tz; notif.alertBody = @"Did enter Region"; notif.alertAction = @"Show"; notif.soundName = UILocalNotificationDefaultSoundName; [[UIApplication sharedApplication] scheduleLocalNotification:notif]; } - person ; 30.01.2012