HKWorkoutSession: не отображается частота сердечных сокращений при выключенном экране в watchOS 2

Я использую iOS 9 beta 4 и watchOS 2 beta 4.

Кажется, я не могу получить данные о частоте сердечных сокращений, когда экран часов становится черным (блокируется). Я получу звонок на applicationWillResignActive, а затем данные о частоте сердечных сокращений просто прекратятся.

Кажется, что датчик также отключается через некоторое время (уже не зеленый), когда экран блокируется.

Кто-нибудь еще наблюдает такое поведение? Я могу опубликовать свой код для запуска WorkoutSession, если кто-то еще получает данные о частоте сердечных сокращений, когда экран на часах заблокирован.


person Philip    schedule 05.08.2015    source источник


Ответы (3)


Начиная с watchOS 3.0 вы можете добавить запись WKBackgroundModes со значением workout-processing в Info.plist расширения.

Из документов:

Запуск в фоновом режиме Сеансы тренировки могут выполняться в фоновом режиме. Работа в фоновом режиме предоставляет приложению следующие возможности:

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

Приложение может продолжать получать доступ к данным с датчиков Apple Watch в фоновом режиме, что позволяет вам постоянно обновлять приложение. Например, бегущее приложение может продолжать отслеживать частоту сердечных сокращений пользователя, обеспечивая отображение самых последних данных о частоте сердечных сокращений всякий раз, когда пользователь поднимает запястье.

person psobko    schedule 15.11.2016

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

Вот примерно то, что я делаю, чтобы начать сбор данных о частоте сердечных сокращений:

func startCollectingHR(){
    guard workoutSession == nil else{return} // Make sure it's not already started
    // Also make sure you get the appropriate HealthKit permissions
    workoutSession = HKWorkoutSession(activityType: HKWorkoutActivityType.CrossTraining, locationType: HKWorkoutSessionLocationType.Outdoor)
    workoutSession!.delegate = self
    healthStore.startWorkoutSession(workoutSession!)
    print("HR collection started.")
}

К сожалению, я не нашел никакого способа получить сердечный ритм для надежной прямой трансляции где-либо за пределами магазина HealthKit на часах.

person TealShift    schedule 21.09.2015

Я заметил подобное поведение и обнаружил, что первая сессия тренировки будет работать, как и предполагалось, но последующие будут запускаться только при активном циферблате. Я решил проблему, сбросив HKWorkoutSession после завершения сеанса.

person mcclux    schedule 16.11.2015