我多久可以从 CLLocationManager 获得更新?

Posted

技术标签:

【中文标题】我多久可以从 CLLocationManager 获得更新?【英文标题】:How soon can I get an update from a 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区域监控不需要后台位置更新 【参考方案1】:

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

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

【讨论】:

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

以上是关于我多久可以从 CLLocationManager 获得更新?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 CLLocationManager 更新创建 Observable

将经度和纬度从 CLLocationManager 传递到 URL?

使用 CoreLocation CLLocationManager 获取过去的位置

有没有办法让 CLLocationManager 进入“空闲”而不是“停止”?

从一个视图控制器访问 CLLocationManager 变量到另一个视图控制器

如何在特定时间段内运行 CLLocationManager