背景中的ios(swift)位置(ios 9.3.2)停止工作

时间:2016-06-01 14:09:13

标签: ios swift core-location

我不确定这是一个错误还是某种配置问题但是(但我把每个选项放在info.plist中,locationManager.allowsBackgroundLocationUpdates = true以及我在网上找到的所有其他提示仍然存在问题)

locationManager(manager:CLLocationManager,didUpdateLocations locations:[CLLocation]){ }

在后台(应用程序关闭)的某个(随机)时间后停止更新位置。在iphone 4s ios 8.4上,这个问题不存在。

也许其他人遇到了这个问题? 感谢

3 个答案:

答案 0 :(得分:0)

我解决了它每隔3分钟重新启动一次位置管理器:

在你的委托方法(我的案例中为locationDidUpdateToLocation)中添加类似

的内容
     self.timeElapsedSinceLastTrackingUpdate = NSDate().timeIntervalSinceDate(self.lastUpdatedTime)
     if timeElapsedSinceLastTrackingUpdate > 180 {
        self.lastUpdatedTime = NSDate()         
        self.LocationMgr.stopUpdatingLocation()
        UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler({})                
        NSTimer.scheduledTimerWithTimeInterval(180, target: self.LocationMgr, selector: #selector(self.LocationMgr.startUpdatingLocation), userInfo: nil, repeats: false)
     }

同时确保NSLocationAlwaysUsageDescription

中有两个键(NSLocationWhenInUseUsageDescriptionInfo.plist
    <key>NSLocationAlwaysUsageDescription</key>
    <string>This app needs to use your location</string>

    <key>NSLocationWhenInUseUsageDescription</key>
    <string>This app needs to use your location</string>

最后,请务必在位置管理器上设置这些变量:

pausesLocationUpdatesAutomatically = false

allowsBackgroundLocationUpdates = true

答案 1 :(得分:0)

此外,您还可以使用重要的更改位置服务,使用此服务,即使您暂停,iOS也会唤醒您的应用

寻找:startMonitoringSignificantLocationChanges: https://developer.apple.com/library/mac/documentation/CoreLocation/Reference/CLLocationManager_Class/index.html#//apple_ref/occ/instm/CLLocationManager/stopMonitoringSignificantLocationChanges

答案 2 :(得分:0)

我遇到了同样的问题。我找到解决这个问题的方法是转到settings - &gt; privacy - &gt; location services - &gt;找到你的应用 - &gt; allow location access - &gt;切换到never - &gt;回到location services - &gt;然后allow location access再次启动您的服务。但有时只工作。

另外,据我所知(可能是我很担心。)如果准确度不够你所设定的。位置更新不会被激活。