Как я могу обновить диспетчер местоположения и таймер в моем приложении, когда оно переходит в фоновый режим? - PullRequest
2 голосов
/ 16 января 2012

У меня есть таймер, который показывает NSTime работы пользователя.Менеджер местоположений и этот таймер перестает обновляться, когда мое приложение переходит в фоновый режим.Как я могу сделать их обновление, когда мое приложение находится в фоновом режиме?

У меня есть представление под названием RunViewController, в котором есть кнопка запуска.Когда пользователь нажимает эту кнопку, запускается диспетчер таймера и местоположения.Код:

 -(void)startRun{
    timeSec = 0;
    timeMin = 0;
    timeHour = 0;

    NSString* timeNow = [NSString stringWithFormat:@"%02d:%02d:%02d",timeHour , timeMin, timeSec];
    //Display on your label
    lblTime.text = timeNow;

    timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerTick:) userInfo:nil repeats:YES];
    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];

    self.locManager = [[CLLocationManager alloc] init];
    locManager.delegate = self;
    locManager.desiredAccuracy = kCLLocationAccuracyBest; //kCLLocationAccuracyBest
    [locManager setDistanceFilter:3]; //kCLDistanceFilterNone

    [locManager startUpdatingLocation];
    locationManagerStartDate = [[NSDate date] retain];


}

In - (void) locationManager: (CLLocationManager *) manager didUpdateToLocation: (CLLocation *) newLocation fromLocation: (CLLocation *) oldLocation

просто рисует линию на картеиз старого местоположения в новое местоположение и сохраните это местоположение в массиве.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 16 января 2012

Нашли решение для реализации этого с помощью форумов разработчиков Apple. Я сделал следующее:

  • Укажите местоположение фонового режима

  • Используйте NSTimer в фоновом режиме, используя

  • UIApplication: beginBackgroundTaskWithExpirationHandler: В случае, если n равно

меньше, чем UIApplication: backgroundTime, оставаясь верным, работает просто хорошо, если n больше, менеджер местоположения должен быть включен (и отключен) еще раз, пока не осталось времени, чтобы избежать Фоновая задача убита. Это работает, так как местоположение является одним из три разрешенных типа фонового выполнения.

Примечание. Потерял некоторое время, протестировав это в симуляторе, где он не работает, отлично работает на моем телефоне.

Здесь является ссылкой для того же.

0 голосов
/ 16 января 2012

Попробуйте это ..

-(void)viewDidLoad
{
    UIDevice* device = [UIDevice currentDevice];
    BOOL backgroundSupported = NO;
    if ([device respondsToSelector:@selector(isMultitaskingSupported)])
        backgroundSupported = device.multitaskingSupported;

    NSLog(backgroundSupported ? @"Yes" : @"No");


    counterTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
     //called after 10min of your app in background
        NSLog(@"10 minutes finished.");
    }];

    theTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(selectorForUpdatingLocation) userInfo:nil repeats:YES];

}
...