【问题标题】:How to start GPS tracking triggered by a iBeacon in Xamarin iOS?如何在 Xamarin iOS 中启动由 iBeacon 触发的 GPS 跟踪?
【发布时间】:2015-11-13 15:00:54
【问题描述】:

我正在开发一款通过跟踪 GPS 来记录旅程的应用。 如果我们从前台启动进程(点击“开始旅程”按钮),后台一切正常。 现在的想法是开始记录这些由 iBeacon 自动触发的旅程。当 iPhone 进入信标区域时,应用会检测到这一点并调用函数 LocationManager.StartUpdatingLocation();

问题: 从后台使用 iBeacons,我们只能获得 10 秒的测距,这与我从 GPS 获取位置更新所必须的数字相同。

我只需要检测我在信标区域内,启动 GPS 并使其保持运行,并且仅在我不在该区域时禁用 GPS。

【问题讨论】:

  • 我一直在尝试很多这样的事情,但直到现在我都无法从后台启动 GPS 定位修复。
  • 您是否尝试过后台长时间运行的任务?我想走这条路。

标签: ios xamarin gps background-process ibeacon


【解决方案1】:

不幸的是,您可以在后台使用CoreLocation 地理围栏,但您无法持续获得良好的 GPS 更新。这不是 Xamarin 的事情 - 这是 iOS 的限制。

我写了 @RobertN 引用的关于将背景信标范围延长到 3 分钟的博客文章。但我认为这对您没有多大帮助,因为您想要不断获取 GPS 更新,而 Apple 根本不允许这样做。

【讨论】:

  • " 但您无法持续获得良好的 GPS 更新。" 错了。但是您必须从前台开始,并且必须以某种方式使用该位置。我的应用程序在后台以最高精度获取 gps,但在他的情况下他不能,因为他想从后台开始
  • @davidgyoung 没有意识到那是您的博客帖子。我已经将它用作其他人的参考已有一段时间了,它在今年早些时候的合同项目中节省了我的培根。谢谢!
  • 很高兴您发现它有帮助!
  • @davidgyoung 正如 AlexWien 所说,如果您从前台开始该过程,我可以不断获取 GPS 更新。在这种情况下,我的 APP 工作正常。关键是是否有任何方法可以获得相同的方法,但从后台(自动)启动该过程。例如:当您进入信标区域时开始收集坐标,直到您离开该区域。这真的很有用,因为用户总是忘记打开应用程序来“点击”开始记录旅程。
  • 如果你在 Info.plist 中请求定位背景模式,并结合我的博文中的扩展背景测距技术,你可以在后台无限期地获取 GPS 更新。但是,这可能会使您的应用更难获得 App Store 的批准。
【解决方案2】:

我们实际上最近也想在我们的一个应用程序中实现这种行为,并发现如果我们在前台启动重要的位置更新 (startMonitoringSignificantLocationChanges),那么我们就能够开始定期的位置更新 (startUpdatingLocation ) 在后台,在我们的didEnterRegion 实现中。

(当然,您的应用需要“始终”授权才能访问位置服务,并启用“位置更新”后台模式。)

我们的应用仍在等待审核,所以这是核心位置的错误还是功能,以及 Apple 是否同意,还有待观察。

【讨论】:

  • 谢谢!好吧,我们也有这个实现,并且似乎可以工作(在前台)。我们遇到的问题是当您从后台启动该过程时。例如:iPhone 处于待机状态,当您进入信标区域时,应用程序应开始记录新的旅程,直到您离开该区域。您的应用在后台也能正常运行吗?
  • 是的,开启重要的位置更新,我们的应用可以在后台启动位置更新,并继续测距直到我们停止它。
  • 感谢您的帮助!该应用程序现在甚至在后台记录旅程(如预期的那样)。我也忘了为 iOS9 设置新权限 AllowsBackgroundLocationUpdates = true
  • 检查日志文件,我注意到应用程序一直在测距信标!我认为这应该在 10 秒后停止。
  • 它通常在 10 秒后停止,因为 didEnter/didExit 只唤醒应用程序 10 秒——并且测距仅在应用程序运行时(前台或后台)有效。 10 秒后,应用程序返回挂起状态。但是随着后台位置更新的运行,应用程序在您停止位置更新之前不会进入睡眠状态,因此您可以继续进行测距。请记住电池消耗 - 实际上您需要在 iTunes 上的应用描述中包含有关此的警告。
【解决方案3】:

我看到的对此的最佳解释可以将 10 秒延长到 3 分钟,但仅此而已......应用拒绝是持续后台操作的问题,除非您的应用真正被视为导航应用:

第二种方法是在后台跟踪信标, 注意它的估计距离,并且仅在 信标估计在特定范围内。这种方法是 在 iOS 上有问题,因为 CoreLocation 通常只允许 10 应用程序在后台时的测距时间秒数。如果一个信标 在 50 米处首次检测到,并且有人正在接近信标 在每秒一米的情况下,移动设备仍将是 40 米 当 iOS 暂停应用并停止测距时离开。

好消息是可以延长后台测距时间 在 iOS 上。如果您的应用是导航应用,您可以指定位置 Info.plist 中“必需的后台模式”中的更新。但 这种方法更难获得 AppStore 的批准——你必须 让审阅者相信您的应用正在提供导航服务 用户。对于许多只想 使用信标在特定距离触发。

幸运的是,您仍然可以延长背景测距时间,而无需 请求特殊的背景模式。你能得到的时间是有限的 ——只有三分钟。但是每次在后台唤醒您的应用程序时,此时钟都会重新启动,这意味着您可以获得额外的三分钟 每次您的应用检测到信标时的测距时间(进入信标 区域)或停止看到信标(退出信标区域。)

通过:http://developer.radiusnetworks.com/2014/11/13/extending-background-ranging-on-ios.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多