Значительное изменение местоположения iOS работает только при пробуждении устройства - PullRequest
0 голосов
/ 19 декабря 2011

Я пытаюсь написать приложение для iOS для iPhone 4 с использованием значительного изменения местоположения, которое запускает локальное уведомление каждый раз, когда делегат местоположения получает обновление местоположения. Мой код размещен ниже. Я оставляю приложение и закрываю его из фона. Пока телефон не спит (экран горит), приложение работает хорошо, запускает уведомления, но когда я усыпляю телефон (экран черный), я больше не получаю уведомления, пока я не просыпаюсь нажатием кнопки «Домой», получением текста и т. д. Затем запускается уведомление. Что мне нужно сделать, чтобы обновления местоположения регистрировались, даже когда устройство спит? Заранее спасибо.

SigLoc.h

#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>

@interface SigLocViewController : UIViewController <CLLocationManagerDelegate> {
CLLocationManager *locationManager;

}

@property (nonatomic, retain) CLLocationManager *locationManager;

@end

SigLoc.m

#import "SigLocViewController.h"

@implementation SigLocViewController
@synthesize locationManager;

- (void)viewDidLoad {
    self.locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    [locationManager startMonitoringSignificantLocationChanges];
}

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation     *)newLocation fromLocation:(CLLocation *)oldLocation 
    UIApplication *app = [UIApplication sharedApplication];
    UILocalNotification *alarm = [[[NSClassFromString(@"UILocalNotification") alloc] init] autorelease];
    if (alarm) {
        alarm.fireDate = nil;
        alarm.repeatInterval = 0;
        alarm.alertBody = @"Location Update";
        alarm.soundName = UILocalNotificationDefaultSoundName;
        alarm.hasAction = NO;
        [app presentLocalNotificationNow:alarm];
    }
}

1 Ответ

0 голосов
/ 21 декабря 2011

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

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

...