我正在尝试在应用程序移动到后台时跟踪用户位置。我只需要跟踪一次。所以,我没有使用后台位置服务。在下面的代码中,当我取消注释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]
可以吗?
答案 0 :(得分:0)
试试这个
默认情况下,对于针对iOS 6.0或更高版本链接的应用程序,这是“是”。
if ([self.manager respondsToSelector:@selector(pausesLocationUpdatesAutomatically)]) {
self.manager.pausesLocationUpdatesAutomatically = NO;
}