仅在应用程序处于后台时才获取位置更新

时间:2012-04-13 06:16:23

标签: iphone ios xcode cllocationmanager

我正在尝试获取位置更新特别是当应用程序处于后台时。当应用程序进入后台时,它应该每n分钟发送一次位置更新 首先我尝试了前景,它工作正常。我将相同的代码复制到applicationDidEnterBackground,我无法打印位置更新。我不知道我被击中的地方请帮助我。

在viewDidLoad

- (void)viewDidLoad {

  locationManager = [[CLLocationManager alloc] init];
  locationManager.delegate = self;
  locationManager.distanceFilter = kCLDistanceFilterNone;
  locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
  [locationManager startUpdatingLocation];
}

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation
{
  int degrees = newLocation.coordinate.latitude;
  double decimal = fabs(newLocation.coordinate.latitude - degrees);
  int minutes = decimal * 60;
  double seconds = decimal * 3600 - minutes * 60;
  NSString *lat = [NSString stringWithFormat:@"%d° %d' %1.4f\"", 
                   degrees, minutes, seconds];
  latLabel.text = lat;
  degrees = newLocation.coordinate.longitude;
  decimal = fabs(newLocation.coordinate.longitude - degrees);
  minutes = decimal * 60;
  seconds = decimal * 3600 - minutes * 60;
  NSString *longt = [NSString stringWithFormat:@"%d° %d' %1.4f\"", 
                     degrees, minutes, seconds];
  longLabel.text = longt;
}

我尝试在AppDelegate中粘贴这些方法。它无法正常工作:(。帮帮我

2 个答案:

答案 0 :(得分:2)

您不能简单地将代码粘贴到那里并希望您的应用程序在后台运行。您必须将其注册为在后台运行的应用程序。请参阅this article

中的实施长时间运行的后台任务部分

答案 1 :(得分:2)

根据评论的讨论,我建议你在plist中创建条目。

UIBackgroundModes for location in plist

这有帮助。

修改

当您记录坐标时,您需要在NSUserDefaults中的某个地方节省时间。之后,当您下次登录时,您需要找到当前时间之间的差异并存储在NSUserDefaults中。如果你想要的间隔比记录坐标。

希望这有帮助。