2016-05-18 71 views
1

我正在写(在Swift中)需要位置更新(包括在后台模式下)的iOS 9应用程序。问题是我只能在前台获取位置更新。我想我已经正确地做了一切:ios 9应用程序不在后台报告位置

在info.plist中:

  • 指定NSLocationAlwaysUsageDescription的值。

  • 为NSLocationUsageDescription指定了一个值。

  • 为NSLocationWhenInUseUsageDescription指定了一个值。

  • 包含UIBackgroundModes中的“位置”。

  • 包括在UIRequiredDeviceCapabilities

  • 开始外景经理 “GPS” 和 “定位服务”,如下所示:

    let locationManager = CLLocationManager() 
    locationManager.desiredAccuracy = 
        kCLLocationAccuracyHundredMeters 
    locationManager.distanceFilter = 250.0 
    locationManager.allowsBackgroundLocationUpdates = true 
    locationManager.startUpdatingLocation() 
    
  • 我也验证了 locationManager.pausesLocationUpdatesAutomatically是假的。

我得到没有位置更新,而应用程序是不是在前台。我唯一一次获得位置更新的方式是,如果我将应用程序放到前台,甚至不是所有时间。

任何想法发生了什么问题?或者我的期望不正确?

+0

我看到你将距离过滤器设置为250.你尝试了一个更小的值/你走得够远吗? – Raptor

+0

kCLLocationAccuracyHundredMeters的定位精度不会使用GPS,所以您可能需要移动一个公平的距离才能获得任何更新;可能在500-600米左右。你在哪里分配你的位置经理?它是你的AppDelegate的一个属性吗?如果你不需要快速更新或精确的位置,你可能会更好使用显着的位置变化监测 – Paulw11

+0

即使驾驶10-30英里后,我看到绝对没有位置更新。更新仅在我将应用程序放到前台时才会发生。 –

回答

0

如何将应用程序发送到背景?如果你滑动杀死,那么你的应用程序不会自动重新启动接收位置事件。我在代码中没有看到它,你调用了requestAlwaysAuthorization吗?您可能还想实现LocationManager:didFailWithError,以查看是否给出了任何想法。

相关问题