你是否允许在后台使用`startLocationUpdate`?

时间:2017-07-24 17:36:11

标签: ios swift core-location uiapplicationdelegate background-task

我在这里看到很多答案,说你可以。有人说你可以,但你必须将它包装在backgroundTask中,我发现它是冗余的,因为它已经包含在plist中。其他人说你做不到,必须选择其他选择。

然而,Apple文档说:

阅读locationManagerDidPauseLocationUpdates

  

您可以使用此方法的实现来启动区域   监控用户的当前位置或启用访问   位置服务,以确定用户何时再次开始移动。   另一种方法是立即使用a重新启动位置服务   精度降低(可以节省电力),然后返回更大   仅在用户再次开始移动后才准确。

我在locationManagerDidPauseLocationUpdates回调中尝试了重启位置:

locationManager.stopUpdatingLocation()
locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
locationManager.distanceFilter = 200
locationManager.pausesLocationUpdatesAutomatically = false
locationManager.allowsBackgroundLocationUpdates = true
self.locationManager.startUpdatingLocation()

但它不起作用。我再也没有找到locationUpdates了!

我也尝试将它包装在backgroundTask中,如下所示:

var changeLocationTrackingType:UIBackgroundTaskIdentifier?

func changeLocationTrackingInBackground()
{
    dispatch_async(dispatch_get_main_queue()){ [unowned self] in
        self.changeLocationTrackingType = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler({ () -> Void in

            self.changeLocationTrackingType = UIBackgroundTaskInvalid

        })

          locationManager.stopUpdatingLocation()
          locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
          locationManager.distanceFilter = 200
          locationManager.pausesLocationUpdatesAutomatically = false
          locationManager.allowsBackgroundLocationUpdates = true
          self.locationManager.startUpdatingLocation()

    }
}

FWIW我不是在谈论创建一个地区,也不是在谈论重要的位置跟踪。我正在谈论在您或系统停止您的locationTracking之后开始startLocationUpdate

大多数答案建议你使用计时器来改变准确性,但我纯粹想要停下来并能够重新开始。反正有没有这样做?

另外,我知道当你想startLocationUpdate时,你必须处于活跃的runloop状态,只是不确定如何可以保证这一点。

0 个答案:

没有答案