在后台获取iOS压力更新

时间:2018-09-29 03:43:16

标签: ios swift background-process pressure

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

如果没有,那么Pressur之类的应用如何工作?

2 个答案:

答案 0 :(得分:0)

Core Motion为您提供CMAltimeter。 CMAltimeter为您提供CMAltitudeData。 CMAltitudeData给您pressure

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

答案 1 :(得分:0)

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

  • 通过 Info.plist 隐私字符串请求授权(“Location Always and When In Use”“Location When In Use”
  • 通过应用程序的“项目”窗格上的第二个选项卡将后台模式功能添加到您的项目中。启用位置更新。
  • 创建您需要的管理器和实例:
      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