位置更新的时间间隔更短

Posted

技术标签:

【中文标题】位置更新的时间间隔更短【英文标题】:Shorter time interval for location updates 【发布时间】:2018-03-01 00:25:44 【问题描述】:

我的应用高度基于CLLocation 时间戳。我发现CLLocationManager 每隔约 1 秒更新一次位置。这对我的应用程序来说还不够。是否可以配置CLLocationManager 以更短的时间间隔更新位置,或者我应该寻找其他方法(计时器+手动询问位置)?

locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
locationManager.allowsBackgroundLocationUpdates = true
locationManager.distanceFilter = kCLDistanceFilterNone
if #available(ios 11.0, *) 
    locationManager.showsBackgroundLocationIndicator = true

locationManager.startUpdatingLocation()

计时器 + requestLocation() 不起作用。

【问题讨论】:

【参考方案1】:

您无法更改更新频率。但你可能不需要那个。您可以使用CMMotionManager框架计算手机位置,您可以使用CLLocationManager框架获取用户位置。

使用accelerometer 计算设备移动。从didAccelerate method 可以得到xyz 的移动,因此通过将其应用于检测到的用户位置,您可以计算新的设备位置。

希望这会有所帮助,祝你好运。

【讨论】:

能否提供计算位移的代码。 抱歉,我不知道如何使用accelerometer 来计算 GPS 坐标。我需要坐标来检查手机何时位于特定位置。我需要尽快检查。一秒钟的精度是不够的。 无论如何谢谢你的回答。我会检查我可以用accelerometer 做什么。也许会有所帮助。 我做了一些研究,发现了这个视频youtube.com/watch?v=6M6wSLD-8M8。它看起来很有希望,但我认为实施起来会很复杂。谢谢 加速度计数据通常非常嘈杂,无法根据加速度值计算位移,您需要一些非常复杂的信号处理才能从中获得有意义的信息。我过去曾尝试过这样做,但失败了:-)【参考方案2】:

您无法更改位置更新的频率。仅当超过 distanceFilter 的值时,位置服务才会更新。 如果要强制更新位置,请尝试更改 distanceFilter 的值(以米为单位,双精度数据类型)。您可以使用 kCLDistanceFilterNone 作为 distanceFilter 的值。 试试看:

locationManager.distanceFilter = kCLDistanceFilterNone

如果位置或每次移动有任何微小变化,此代码将强制定位服务通知您。

【讨论】:

正如您在我的帖子中看到的那样,我已经在使用 kCLDistanceFilterNone 。仍有一些时间限制。 这解决了我的问题!谢谢,kCLDistanceFilterNone 提供的更新频率比值 0 高得多。感谢您的回答。

以上是关于位置更新的时间间隔更短的主要内容,如果未能解决你的问题,请参考以下文章

地理位置自定义更新间隔(30 秒)

位置未在 10 分钟间隔内更新

使用 Fused 提供程序更新位置的间隔

如何防止其他用户更改 gps 位置和位置更新调用每个小间隔(比如 3 秒)

Google (Play) 睡眠模式下的位置服务更新间隔更改 (Android)

调用 requestLocationUpdates 后如何更改 FusedLocationApi 更新间隔