重要的位置变化至少每15分钟不会触发

时间:2016-02-18 13:31:10

标签: ios location core-location cllocationmanager

根据苹果文档,重要的位置变化应该至少每15分钟更新一次位置。当我显着移动时,我确实收到了更新,但是当设备静止时却没有。您对更新的体验是什么?他们至少每15分钟来一次吗?

  

如果GPS级别的准确度对您的应用并不重要,而您不需要   连续跟踪,您可以使用重要更改位置   服务。使用重要更改位置至关重要   正确服务,因为它至少唤醒了系统和你的应用程序   每15分钟,即使没有发生任何位置变化,也是如此   一直持续到你停止它为止。

1 个答案:

答案 0 :(得分:2)

好吧,我有一个天真的解决方案。您可以使用NSTimer强制CLLocationManger实例每15分钟更新一次当前位置,或者您希望定期更新它的时间。

这是我要使用的代码:

首先,请在viewDidLoad或其他地方调用此方法开始更新您的位置。

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

    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;

    // 900 seconds is equal to 15 minutes
    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:900 target:self selector:@selector(updateUserLocation) userInfo:nil repeats:YES];
    [timer fire];    
}

其次,实现updateUserLocation方法:

-(void)updateUserLocation{
    [self.locationManager startUpdatingLocation];
}

最后,确认协议,然后执行location did update方法。我们阅读了最新的更新结果,并让位置管理员停止更新当前位置,直到下一个15分钟。:

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{
    CLLocation *userLocation = [locations objectAtIndex:0];
    CLLocationCoordinate2D userLocationCoordinate = userLocation.coordinate;
    /*
    Do whatever you want to update by using the updated userLocationCoordinate.
    */
    [manager stopUpdatingLocation];
}