Я разрабатываю приложение для 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 также в фоновом режиме (и в неактивном состоянии)?