我正在实施一个应用,我需要通过以下方式跟踪用户的位置:
我解决此问题的方法如下:
当应用程序位于前台时,这可以正常工作,因为从位置管理器返回的位置是准确的。
但是如果应用程序在后台,那么位置管理器将不会返回准确的位置,因为它是第一次运行并且返回的第一个坐标不准确。
问题是如何在后台触发 didExitRegion 时获得用户的准确位置?
感谢
答案 0 :(得分:3)
didExitRegion:
可靠地射击我没有太多运气;它经常远远超过我所在地区的边缘。
如果您每2公分左右需要一次API调用,我建议您使用CLLocationManager
的{{3}}。如果您的准确性/精确度很重要,只需将位置服务注册为必要的背景状态(-startMonitoringSignificantLocationChanges
在您的应用程序plist中;您可能需要这样做才能从后台使用重要的更改API),并使用正常-startUpdatingLocation
,CLLocationManager
个实例上有适当的UIBackgroundModes
和distanceFilter
字段值。
答案 1 :(得分:0)
这里发生了一些事情。
您提到区域更改触发器是一个小变量。这是故意的;为了避免在沿着两个区域之间的边界向下走时触发大量触发器,在时间和位置上都会有一些触发的粘性。
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进行后台处理。关于其他地方的大量文件。
希望有所帮助。