1

我正在尝试获取位置更新,尤其是当应用程序处于后台时。当应用程序进入后台时,它应该每 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 中。它不工作:(。帮帮我

4

2 回答 2

2

您不能简单地将代码粘贴到那里并期望您的应用程序在后台运行。您必须将其注册为在后台运行的应用程序。请参阅本文中的实现长时间运行的后台任务部分

于 2012-04-13T06:23:19.550 回答
2

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

UIBackgroundModes for location in plist

这有帮助。

编辑

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

希望这可以帮助。

于 2012-04-13T07:09:59.683 回答