在iOS 7中跟踪背景中的用户位置

时间:2013-11-23 03:38:04

标签: ios location cllocationmanager background-process

我正在尝试在应用程序移动到后台时跟踪用户位置。我只需要跟踪一次。所以,我没有使用后台位置服务。在下面的代码中,当我取消注释1时,它可以工作,但是当我取消注释2时它不起作用。

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    // 1 works here [self startStandardUpdates];

    self.bgTask = [application beginBackgroundTaskWithExpirationHandler:^{

    [application endBackgroundTask:self.bgTask];
    self.bgTask = UIBackgroundTaskInvalid;
}];

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{

    // 2 doesn't work here [self startStandardUpdates];

});

}

在第二种情况下,不会调用此委托函数。

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
    NSLog(@"Updated\n%@",locations);
    [self.manager stopUpdatingLocation];
    [[UIApplication sharedApplication] endBackgroundTask:self.bgTask];
    self.bgTask = UIBackgroundTaskInvalid;

}

有人可以告诉我为什么这不适用于第二种情况。另外,在第一个位置使用[self startStandardUpdates]可以吗?

1 个答案:

答案 0 :(得分:0)

试试这个

默认情况下,对于针对iOS 6.0或更高版本链接的应用程序,这是“是”。

if ([self.manager  respondsToSelector:@selector(pausesLocationUpdatesAutomatically)]) {
    self.manager.pausesLocationUpdatesAutomatically = NO;
}