Получение местоположения в фоновом режиме iOS - PullRequest
2 голосов
/ 08 июля 2011

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

Это мой код:

- (void)threadEntryPoint:(ActualizarPosicionGPS2AppDelegate *)paramSender{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    while([[NSThread currentThread] isCancelled] == NO){
        [NSThread sleepForTimeInterval:10.0f];
        if ([[NSThread currentThread] isCancelled] == NO &&
            [[UIApplication sharedApplication] backgroundTimeRemaining] != DBL_MAX) {
            [self getLocation];
        }
    }

    [pool release];
}

в приложении: didFinishLaunchingWithOptions:

[NSThread detachNewThreadSelector:@selector(threadEntryPoint:) toTarget:self withObject:self];

Тогда у меня есть следующее:

-(void) endTaskWidthIdentifier:(NSNumber *)paramIdentifier{
    UIBackgroundTaskIdentifier identifier = [paramIdentifier integerValue];
    [[UIApplication sharedApplication] endBackgroundTask:identifier];
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
    self.backgroundTaskIdentifier = [application beginBackgroundTaskWithExpirationHandler:^{
        NSNumber *backgroundTask = [NSNumber numberWithInteger:self.backgroundTaskIdentifier];
        [self performSelectorOnMainThread:@selector(endTaskWidthIdentifier:) withObject:backgroundTask waitUntilDone:YES];
        self.backgroundTaskIdentifier = UIBackgroundTaskInvalid;
    }];

}

И что важно, вот getLocation:

-(void)getLocation{
    if(nil==locationManager)
        locationManager = [[CLLocationManager alloc] init];

    [locationManager setDelegate:self];
    [locationManager setDistanceFilter:kCLLocationAccuracyHundredMeters];
    [locationManager setDesiredAccuracy:kCLLocationAccuracyBest];

    [locationManager startUpdatingLocation];
    NSLog(@"ouch");
    if(locationManager.location!=nil){
        NSLog(@"obtenido %f, %f",locationManager.location.coordinate.latitude,locationManager.location.coordinate.longitude);
    }
}

locationManager.location всегда возвращает nil, поэтому не получает текущее местоположение.

Я что-то не так делаю? Возможно, у меня неправильная концепция!

Большое спасибо!

1 Ответ

1 голос
/ 01 августа 2011

См. Мой ответ в этом сообщении.

Как получать фоновое обновление местоположения каждые n минут в моем приложении iOS?

Возможно, вы также захотите проверить, почемуметоды вашего делегата не вызывают

Если вам это удобно, пришлите мне свой проект по адресу xs2bush@yahoo.com.Я выполню код, чтобы увидеть, что происходит не так.

...