【问题标题】:Get iOS Pressure Updates in Background在后台获取 iOS 压力更新
【发布时间】:2018-09-29 03:43:15
【问题描述】:

我正在寻找一种在应用程序处于后台或另一个应用程序在前台运行时每 10 分钟左右获取一次气压数据(而不是海拔高度)的方法。这可能吗?如果有,怎么做?

如果不是,那么Pressur 之类的应用如何工作?

【问题讨论】:

  • 海拔和气压差不多...
  • @matt 海平面上的气压每天都在变化。我正在寻找这些类型的详细测量值。
  • 是的,CMAltmeter 会将它们提供给您。我不明白你怎么能有这个问题。您看过 CMA高度计吗?这就是高度计,它测量压力

标签: ios swift background-process pressure


【解决方案1】:

Core Motion 为您提供 CMA 高度计。 CMAltmeter 为您提供 CMAltitudeData。 CMAltitudeData 给你pressure

(在后台运行是另一回事;您不能仅仅为了使用Core Motion而在后台运行,因此您必须找到其他一些在后台运行的理由。)

【讨论】:

  • “在后台运行的其他原因”是什么意思?是否意味着我必须执行一些其他后台进程,并与它一起使用 CMAltmeter?
  • 是的,正是如此。
  • 你能指导我如何做到这一点吗?
  • 是的,我建议searching Stack Overflow。这个问题已经在那里讨论过很多次了。
【解决方案2】:

为了接收 后台 CoreMotion 更新,您需要做几件事,但归结为在后台运行 CoreLocation。 CoreMotion 不会自行在后台运行。

  • 通过Info.plist隐私字符串请求授权(“位置始终和使用时”“使用时位置”
  • 通过应用程序“项目”窗格中的第二个选项卡将后台模式功能添加到您的项目。启用位置更新。
  • 创建您需要的管理器和实例:
      let locationManager = CLLocationManager()
      let motionManager = CMMotionManager() // Not required in this case
      let altimeter = CMAltimeter()
    
  • 将位置经理的 allowsBackgroundLocationUpdates 设置为 true
  • 注册适当的回调,在这种情况下,您需要一个 CMAltimeter 实例和类似的东西:
if CMAltimeter.isRelativeAltitudeAvailable() {
    altimeter.startRelativeAltitudeUpdates(to: OperationQueue.main) { (data, error) in
    /* Handle Altitude changes here */
    }
}

与其他传感器(例如motionManager.gyroUpdateInterval)不同,您似乎无法控制调用的频率;您可以酌情取平均值或丢弃值。

我有一个(越来越少)背景传感器数据收集的简单演示 in a repo here

【讨论】:

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