首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免iOS 11全球定位系统跟踪中的空白

如何避免iOS 11全球定位系统跟踪中的空白
EN

Stack Overflow用户
提问于 2017-09-29 18:53:04
回答 1查看 230关注 0票数 3

我遇到了一个问题,在一个跟踪应用,但只有在iOS 11。应用程序被动地记录在一定条件下的背景你的全球定位系统位置。

在iOS 11上发生的问题是,看似随机的CLLocationManager停止报告全球定位系统事件的时间从10到900+秒不等。

位置管理器设置如下:

代码语言:javascript
复制
    let locationManager = CLLocationManager()
    locationManager.allowsBackgroundLocationUpdates = true
    locationManager.pausesLocationUpdatesAutomatically = false
    locationManager.startMonitoringSignificantLocationChanges()
    locationManager.desiredAccuracy = 10
    locationManager.activityType = .automotiveNavigation

认为线程CoreLocation正在为所有回调管理和使用可能会带来负担。

我已经尝试过委托一个不同的线程进行处理,所以这个应用程序不会绑定CoreLocations资源。这是使用如下所设置的操作队列完成的:

代码语言:javascript
复制
    let queue = OperationQueue()
    queue.maxConcurrentOperationCount = 1
    queue.qualityOfService = .userInitiated

使用该操作队列进行回调:

代码语言:javascript
复制
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        queue.addOperation {
            // process locations
        }
    }

引入操作队列无助于避免这些空白,但是它确实做到了这样,当间隙发生时,位置管理器使用相同的时间戳报告一堆(不同的)位置。

具有相同时间戳的位置并不是所有丢失的位置,也就是说,如果间隔为200秒,我可能只能得到15个具有相同时间戳的位置。

我希望这里有人能告诉我为什么会发生这种情况,以及我能做些什么来避免这些差距。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-26 19:47:42

经过大量的回顾、试验和与苹果公司的讨论,我们现在似乎已经解决了这个问题。尽管苹果只有在跟踪开始时应用程序位于前台时才能保证GPS跟踪背景。我们应用的修补程序正在更改以下内容:

代码语言:javascript
复制
        locationManager.startMonitoringSignificantLocationChanges()

..。至:

代码语言:javascript
复制
        locationManager.stopMonitoringSignificantLocationChanges()
        locationManager.startMonitoringSignificantLocationChanges()

理论上说,应用程序的设置在启动时应用于“监视”设置时会损坏。如果首先将“监视”设置设置为false,然后将其设置为true,则不会发生损坏。

这一修复是在应用程序商店的应用程序中为数百人,并跟踪在后台工作很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46495288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档