【问题标题】:How soon can I get an update from a CLLocationManager?我多久可以从 CLLocationManager 获得更新?
【发布时间】:2016-05-08 20:21:49
【问题描述】:

我尝试在我的应用程序中使用区域监控,据我了解,这会触发两种方法,didEnterRegiondidExitRegion,即使应用程序甚至不在后台。
因此,这可能会导致函数在应用程序不知情的情况下被调用,就好像这些函数只是在基本应用程序环境中调用的代码块,但它们周围的所有内容都为空。例如,如果我们创建了一个 CLLocationManager,它现在是空的,我们需要创建一个新的。

我需要从 CLLocationManager 获取当前位置,但我可以使用它吗?

locationManager = [[CLLocationManager alloc] init];

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

locationManager.distanceFilter = 0; 
[locationManager startUpdatingLocation];

CLLocation *currentLocation = [locationManager location];

currentLocation 会保持良好的价值,还是只会在委托方法 didUpdateLocations 中发生这种情况?

【问题讨论】:

  • 委托将在大约 2 到 3 秒内获得一个位置,但您必须知道,当第一次调用委托时,它在击中委托 2 或是正确值的 3 倍
  • distanceFilter 应该根据您的要求分配一些值,否则它会消耗设备电池并且如果您的应用被 iOS 杀死,请不要忘记重新启动后台定位服务。
  • @SunilSingh 重启后台定位服务是什么意思?
  • 如果操作系统内存不足,iOS 可以杀死并垃圾收集您的应用程序。如果在您的应用程序被杀死并且 iOS 检测到位置更改后,iOS 将在后台再次启动您的应用程序,但是您需要手动重新启用后台定位服务。在这里查看developer.apple.com/library/ios/documentation/CoreLocation/…
  • 我不确定你的意思@SunilSingh,如果应用程序被杀死并输入一个区域,应用程序将重新启动。我找不到任何有关重新启用位置服务的信息。 PS区域监控不需要后台位置更新

标签: ios objective-c core-location


【解决方案1】:

在区域监控期间持续存在的是区域。当应用程序处于活动状态时,将使用 a 位置管理器(不一定是启动监控的位置管理器)调用代理。

如果应用在后台启动,它应该检测到它正在启动以进行区域监控并创建一个位置管理器(以及处理事件所需的任何其他东西)。

【讨论】:

  • 仍然,代码会在该函数中为我提供一个位置吗?还是只会在 didupdatelocations 委托方法中发生?
  • 是的,您只能从位置监控中获取位置,区域监控仅提供区域的进出。但是您可以在获知区域状态更改后像往常一样获取位置。您可以使用传递给委托的位置管理器 - 最好 - 或创建另一个来获取位置。
  • 注意 currentLocatuon 变量。我在问这个值是否会更新为一个好的值。或者我应该等待 didUpdateLocations....
  • @Ted,我们需要定义“好”。它将在区域中有一个值,但可能不像 didUpdateLocation 委托那样接近实际位置。确定检查 CLLocation 对象上的时间戳并获取从现在开始的时间间隔的一种启发式方法。
猜你喜欢
  • 1970-01-01
  • 2011-10-01
  • 1970-01-01
  • 2013-04-16
  • 1970-01-01
  • 2013-09-21
  • 2011-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多