在iOS 8中定期更新计时器/背景中的位置

时间:2014-09-22 18:25:54

标签: ios core-location

如果应用程序处于后台状态或处于前台状态,我希望每5分钟更新一次用户的位置。这是一个非常敏感的应用程序,所以在任何时候都知道位置是至关重要的。

在SO上有很多关于这个问题的答案,但很多都是针对iOS 6及更早版本的。在iOS 7之后,许多后台任务已经改变,我很难找到在后台实现定期位置更新的方法。

2 个答案:

答案 0 :(得分:2)

您需要使用CoreLocation的委托。一旦获得坐标,请停止CoreLocation,设置计时器以在5分钟内再次启动它。

使用iOS 8,您需要为NSLocationWhenInUseUsageDescription和/或NSLocationAlwaysInUseDescription设置plist条目。

Apple文档非常清楚如何完成所有这些操作。

-(void)startUpdating{
    self.locationManager = [[CLLocationManager alloc]init];
    self.locationManager.delegate = self;
    [self.locationManager requestWhenInUseAuthorization];
    [self.locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
    [self.locationManager startUpdatingLocation];

}

-(void)timerFired{
    [self.timer invalidate];
    _timer = nil;
    [self.locationManager startUpdatingLocation];
}

// CLLocationDelegate
- (void)locationManager:(CLLocationManager *)manager
     didUpdateLocations:(NSArray *)locations{
    if(locations.count){
        // Optional: check error for desired accuracy
        self.location = locations[0];
        [self.locationManager stopUpdatingLocation];
        self.timer = [NSTimer scheduledTimerWithTimeInterval:60 * 5 target:self selector:@selector(timerFired) userInfo:nil repeats:NO];
    }
}

答案 1 :(得分:0)

apple documentation上有很多关于此问题的信息。

此外,还有一些额外的答案herehere以及stackoverflow的先前答案。看起来有足够的信息可以帮助你!