首页 > 解决方案 > CoreLocationManager 从不暂停?

问题描述

试图让我的应用程序使用更少的电量,它总是在后台跟踪位置,但我希望它自动暂停,这样我就可以打开区域监视并在用户移动一点后使用它来恢复精确的位置监视。

我已经打开应用程序半小时了,定位服务没有暂停。我认为自从 Apple 在 iOS 13 中更改位置信息以来就是这种情况?我不太确定。我可以在网上找到的所有文档似乎都已经过时了。

非常感谢任何建议,相关代码如下:

init() {
        locationManager = CLLocationManager()
        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.distanceFilter = 10
        locationManager.activityType = .fitness
        locationManager.requestAlwaysAuthorization()
        locationManager.allowsBackgroundLocationUpdates = true
        locationManager.pausesLocationUpdatesAutomatically = true
        locationManager.showsBackgroundLocationIndicator = true
        locationManager.startUpdatingLocation()
    }
    func locationManagerDidPauseLocationUpdates(_ manager: CLLocationManager) {
        delegate?.paused(tracker: self)
        print("MT | LOCATION SERVICES PAUSED!") <---- NEVER GETTING CALLED (been running for 40 minutes now, no location updates, still going though?)
        // if not already, start region monitoring

    }
 func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        // Collect data
        for location in locations {
           print("MT | New Location: \(location)")
        }
    }

标签: iosswiftcore-location

解决方案


我不会依赖连接到 Xcode。Xcode 通常是贪婪的。它不希望您停止调试。所以它永远不会让应用程序处于暂停状态。

的回调locationManagerDidPauseLocationUpdates与 Xcode 阻止的被暂停的应用程序有些相同。

我测试的方法是使用os.log. 然后将输出记录到 Mac 的控制台应用程序。见这里


只要确保应用程序不是从您从 Xcode 运行的启动。我宁愿断开您的设备与 Xcode 的连接,终止应用程序。断开您的设备与 Xcode 的连接。然后再次点击应用程序图标。这样 Xcode 就无法干预。


推荐阅读