Приложение не получает обновления DeviceMotion в фоновом режиме (WatchOS 6) - PullRequest
0 голосов
/ 08 апреля 2020

Я разрабатываю приложение для Apple Watch, которое получает данные акселерометра, гироскопа через DeviceMotion и частоту пульса через HKWorkout.

Пока приложение не остается на переднем плане, все работает хорошо. Однако, когда он входит в неактивное состояние (когда пользователь опускает запястье), в течение некоторого времени он работает, но в определенный момент он останавливается. Кроме того, когда приложение переходит в фоновый режим, оно перестает собирать новые обновления DeviceMotion, но я думаю, что наблюдатель частоты пульса продолжает работать, поскольку зеленый индикатор все еще остается включенным.

Код, который я использую для DeviceMotion:

if self.motion.isDeviceMotionAvailable {
     self.motion.deviceMotionUpdateInterval = 1.0 / 100.0
     self.motion.showsDeviceMovementDisplay = true

     self.motion.startDeviceMotionUpdates(using: .xMagneticNorthZVertical, to: OperationQueue.main, withHandler: { (data, error) in
          if let d = data {
               //collecting data
          }
     }
}

Код, который я использую для частоты сердечных сокращений:

let workoutConfiguration = HKWorkoutConfiguration()
workoutConfiguration.activityType = .crossTraining
workoutConfiguration.locationType = .indoor

do {
     if workoutSession == nil {
          workoutSession = try HKWorkoutSession(healthStore: HealthDataManager.sharedInstance.healthStore!, configuration: workoutConfiguration)
               workoutSession?.startActivity(with: Date())
          }
} catch {
      print("Error starting workout session: \(error.localizedDescription)")
}

HealthDataManager.sharedInstance.observeHeartRateSamples { (heartRate) -> (Void) in
      print("heart rate sample: \(heartRate)")
      self.lastHearRateSample = heartRate
}

Поскольку состояния документации Apple (* 1012) *)

Пока активен сеанс тренировки, ваше приложение может продолжать работать в фоновом режиме. Это позволяет вашему приложению контролировать пользователя и собирать данные на протяжении всей активности. Кроме того, он гарантирует, что ваше приложение появляется всякий раз, когда пользователь проверяет свои часы.

Я думал, что в этих случаях не нужно было управлять поведением приложения. Однако, похоже, что-то должно быть сделано. Каков наилучший способ сбора новых данных DeviceMotion также в фоновом режиме (и в неактивном состоянии)?

1 Ответ

0 голосов
/ 10 апреля 2020

Оказалось, что приложение ушло в фоновом режиме из-за тренировки аптечки. Однако я использовал слишком много ресурсов, и система приостановила приложение.

...