【问题标题】:ios 9 app not reporting location in backgroundios 9 应用程序未在后台报告位置
【发布时间】:2016-09-14 08:17:16
【问题描述】:

我正在(在 Swift 中)编写一个需要位置更新的 iOS 9 应用程序,包括在后台模式下。问题是我只能在前台获取位置更新。我认为我做的一切都是正确的:

在 info.plist 中:

  • 为 NSLocationAlwaysUsageDescription 指定了一个值。

  • 为 NSLocationUsageDescription 指定了一个值。

  • 为 NSLocationWhenInUseUsageDescription 指定了一个值。

  • 在 UIBackgroundModes 中包含“位置”。

  • 在 UIRequiredDeviceCapabilities 中包含“gps”和“location-services”

  • 按如下方式启动位置管理器:

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

当应用程序不在前台时,我得到 no 位置更新。我获得位置更新的唯一时间是我将应用程序置于前台,即便如此,也不是一直如此。

知道出了什么问题吗?还是我的预期不正确?

【问题讨论】:

  • 我看到您将距离过滤器设置为 250。您是否尝试了较小的值/您走得够远吗?
  • kCLLocationAccuracyHundredMeters 的位置精度不会使用 GPS,因此您可能需要移动一段距离才能获得任何更新;可能在500-600m的数量级。你在哪里分配你的位置经理?它是您的 AppDelegate 的属性吗?如果您不需要快速更新或精确位置,最好使用显着位置变化监控
  • 我看到绝对没有位置更新,即使在行驶 10-30 英里之后也是如此。仅当我将应用程序置于前台时才会更新。
  • 位置管理器是一个类的静态字段,虽然不是 AppDelegate。关于重大变更通知:我在那里看到了同样的问题,这就是我切换到标准的原因。
  • 可能是某种省电模式可以防止这种情况发生吗?

标签: ios swift core-location


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    • 2015-09-05
    • 2017-08-24
    • 2017-05-18
    • 1970-01-01
    • 2016-08-08
    • 2012-07-05
    相关资源
    最近更新 更多