【问题标题】:get an accurate coordinate from didExitRegion从 didExitRegion 获取准确坐标
【发布时间】:2012-10-17 18:08:09
【问题描述】:

我正在实现一个应用程序,我需要通过以下方式跟踪用户的位置:

  • 在应用处于后台或关闭时跟踪用户的位置
  • 如果用户的位置改变了大约 2000 米,我应该执行 API 调用。

我解决这个问题的方法如下:

  • 当用户第一次启动应用程序时,我开始使用他的当前位置监控一个区域
  • 如果 didExitRegion 被触发,我执行 API 调用并将当前监控的区域替换为以当前位置为新区域中心的新区域。

当应用程序位于前台时,这可以正常工作,因为从位置管理器返回的位置是准确的。

但是如果应用程序在后台,那么位置管理器将不会返回准确的位置,因为它是第一次运行并且返回的第一个坐标不准确。

问题是当 didExitRegion 在后台触发时,我如何才能获得用户的准确位置?

谢谢

【问题讨论】:

  • 请求位置管理器更新当前坐标并使用这些坐标怎么样?
  • 这是我现在正在做的事情,但它没有给出准确的位置。我想知道是否有办法从位置管理器那里获得最准确的位置。
  • 当应用进入后台时系统可能会改变所需的准确度?
  • @Kassem,你能解决这个问题吗?当didExitRegion 被调用时,我startLocationupdate 并等待位置更新委托调用以获取当前位置。这大约有一半的时间。我也做registerBackgroundTask,但这并不能解决问题。它总是在模拟器上工作,但在实际设备上并不可靠。

标签: iphone objective-c ios5 cllocationmanager


【解决方案1】:

didExitRegion: 可靠地触发,我运气不佳;它经常在比我所在地区的边缘更远的地方开火。

如果您只需要每 2 公里左右调用一次 API,我建议您使用 CLLocationManager-startMonitoringSignificantLocationChanges。如果您的准确性/精度很重要,只需将位置服务注册为必要的后台状态(UIBackgroundModes 在您的应用程序列表中;您可能需要这样做才能使用后台的重大更改 API),并使用普通的 @ 987654329@,在您的 CLLocationManager 实例上具有适当的 distanceFilterdesiredAccuracy 字段值。

【讨论】:

  • -startMonitoringSignificantLocationChanges 不准确,有时每 8 公里触发一次。目前我正在使用您提到的另一种方式,但它会耗尽电池电量。
【解决方案2】:

这里发生了几件事。

您提到区域更改触发器有一点可变性。这是故意的;为避免在您沿着两个区域之间的边界走时触发大量触发器,触发器在时间和位置上都有一定的粘性。

来自文档 (http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html#//apple_ref/doc/uid/TP40009497-CH2-SW1)

The system does not report boundary crossings until the boundary plus a designated cushion distance is exceeded. You specify the desired cushion distance for a region when you register it using the startMonitoringForRegion:desiredAccuracy: method. This cushion value prevents the system from generating numerous entered and exited events in quick succession while the user is traveling close the edge of the boundary.

获得准确的位置与正常情况没有什么不同。您启动位置管理器并等待,直到您获得所需精度的位置更新。关闭经理并使用该职位。

因为您在后台运行,所以您只有十分钟的时间来执行此操作,并且您必须告诉操作系统您正在使用 UIApplication 的 startBackgroundTaskWithExceptionHandler 进行后台处理。其他地方的大量文档。

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-10
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    相关资源
    最近更新 更多